es6中await和async的作用分别是:1、async用于声明一个函数是异步执行,并返回一个Promise对象;2、await用于等待一个异步方法执行完成,因为await只能用于async函数中,所以用于等待一个async函数的返回值。
本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。
async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
await只能放在async函数里
await后面接一个会return new promise的函数并执行它。
在遇到await时,会阻塞后面的代码,先执行async外面的同步代码,
如果等待的是promise,等Promise完成,然后把 resolve 的参数作为 await 表达式的运算结果。
如果等待的是表达式,执行完async外面同步代码后再回来继续往下执行
async
async 函数(包含函数语句、函数表达式、Lambda表达式)会返回一个 Promise 对象。
如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。
如果 async 函数没有返回值,又该如何?很容易想到,它会返回 Promise.resolve(undefined)。
Promise 的特点——无等待,所以在没有 await 的情况下执行 async 函数,它会立即执行,返回一个 Promise 对象,并且,绝不会阻塞后面的语句。这和普通返回 Promise 对象的函数并无二致。
await
一般来说,都认为 await 是在等待一个 async 函数完成。不过按语法说明,await 等待的是一个表达式,这个表达式的计算结果是 Promise 对象或者其它值(换句话说,就是没有特殊限定)。
因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值,即promise的resolve(这里的值)。
await 不仅仅用于等 Promise 对象,它可以等任意表达式的结果,所以,await 后面实际是可以接普通函数调用或者直接量的。
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
为什么要用await
为了使我们的异步代码,更像同步的代码
有多个promise,怎么拿到所有的promise都结束后的结果
因为Promise.all()返回的也是一个promise所以如果要使用await拿到多个promise的值,可以直接await Promise.all()
【相关推荐:javascript视频教程、web前端】
以上是es6中await和async有什么作用的详细内容。更多信息请关注PHP中文网其他相关文章!