async、await、Promise的用法

作者 拓荒 日期 2019-08-02

在学习nodejs的时候了解到最新的ES7语法 async await 可以方便的处理异步执行问题,由于之前都是用的Promise来处理的,大致看了下新语法,感觉非常榜,刚开始了解到的用法大致如下:

const a = async function(){
function b(){
setTimeout(()=>{
console.log(11)
},1000)
}
await b()
console.log(22)
}

然后发现还是先打印22然后再打印11,很是纳闷,最后深入了解才知道,await后面需要是一个Promise对象才可以,由于很多第三方模块都已经封装好了,所以可以直接再await后面跟第三方模块的方法,如果是我们自己写的异步方法需要按如下方式来写:

(async function(){
let res = await new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(11)
resolve(22)
},1000)
})
console.log(res)
console.log(33)
})()

需要注意的是异步方法执行完后需要执行Promiseresolvereject回调函数,不然的话awiat后面的方法执行完就没办法继续向下执行,同时resolvereject里面的参数就是awiat后面方法执行后的返回值,可以用一个变量来接收,如果下面的逻辑需要用到这个返回值便可以很方便的使用了。