ES6之 async 和 await
为了最终消除回调,使用链式调用还是不太方便。于是官方开发了 async 和 await ,以便于更方便地使用异步函数。
async 和 await 必须放在一个函数里。 async 可以定义一个函数为异步函数,也就是会返回一个 Promise 。如果已经返回了 Promise ,则不需要写 async 。await 是写在 async 函数里面,表示等待一个异步函数成功后的结果。相当于停在上一个异步过程,得到下一个异步成功后的结果。如果发生错误,就会停在发生报错的地方。如果要处理报错,需要使用 try 和 catch 两个关键字。下面是对之前例子的改写:
(async()=>{
let isSuccess=false
for (const name of beautyGirls) {
try{
const reply=await sendMessage(name)
console.log(reply)
console.log('表白成功!')
isSuccess=true
break;
}
catch(reply){
console.log(reply)
console.log('表白失败')
}
}
if(!isSuccess){
console.log('邓哥注定孤独一生')
}
})()
可以看到,使用了 async 和 await 之后,可以很方便地在 for 循环中使用,如果使用链式调用,则得使用 reduce 方法不断调用 then 函数,并且很难理解。如果不使用 try 和 catch 方法,就会在第一次报错之后停止,不会继续往下进行。