什么是异步?什么是同步?
同步:同一个线程当中,按照顺序完成不同的操作,是一个阻塞模式;后一个请求操作需要等待前一个操作完成之后,才能发出。
异步:需要开启不同的线程,是非阻塞模式。
其实同步类似于打电话,而异步相当于发短信。
为什么这样说呢?
如果你正在通话当中,别人此刻正想打电话给你,那么对方会受到客服小姐姐的提示:你拨打的电话正在通话中,请稍后再拨,这就说明线程被占用了,打电话需要排队,要等到别人通话完,才轮到你拨打电话,这就是同步。
而异步就更简单了,就比如你手机群发短信,群发微信,既然是可以群发,那就是不需要排队,即多个线程同时进行,不会受到阻塞。
async关键字,用于声明和定义异步函数,即修师函数用的,用来处理回调函数。
用法:
async function func(){}
返回的是promise对象,可以通过.then()和.catch()方法来分别处理成功和失败的返回结果。
异步函数的内部可以await关键字,await,用于暂停异步函数的执行,即阻止后面代码的运行。
用法:
const result = await someAsyncCall()
当await关键字使用在Promise前面时,await需要等待Promise完成,并返回Promise的结果。
await只能和Promise一起使用,不能和callback函数一起使用。
async和await一般时搭配使用,await只能使用在async函数中。
router.get('/list', async (ctx, next) => {
let response = await axios.get('https://pacaio.match.qq.com/openapi/getWeiboRankingList')
ctx.body = response.data //将拿到的JSON数据返回给前台
})
Promise对象用于表示一个异步操作的最终完成(或失败)即其结果的返回值。
promise方式使用.then()和.catch()来获取成功的返回信息和捕捉失败的信息
return new Promise((resolve,reject)=>{
})
.then(res=>{
resolve(res)
})
.catch(err=>{
reject(err.message)
})
callback方式采用success返回成功信息,fail返回失败的细腻些,complete返回成功和失败的信息。
网友评论