ES6之 async 和 await

41 阅读1分钟

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 方法,就会在第一次报错之后停止,不会继续往下进行。