async和await
async functions 和 await 关键字是最近添加到JavaScript语言里面的。它们是ECMAScript 2017 JavaScript版的一部分()。简单来说,它们是基于promises的语法糖,使异步代码更易于编写和阅读。通过使用它们,异步代码看起来更像是老式同步代码,因此它们非常值得学习。
async函数
async函数是使用async 关键字声明的函数。 async函数是AsyncFunction 构造函数的实例, 并且其中允许使用await 关键字。async 和await 关键字让我们可以用一种更简洁的方式写出基于Promise 的异步行为,而无需刻意地链式调用promise 。
- 语法
async function name([param[, param[, ... param]]]) {
statements
}
- 参数
- name
函数名称。 - param
要传递给函数的参数的名称。 - statements
包含函数主体的表达式。可以使用await机制。
-
返回值 一个Promise,这个promise要么会通过一个由async函数返回的值被解决,要么会通过一个从async函数中抛出的(或其中没有被捕获到的)异常被拒绝。 -
描述 async函数可能包含0个或者多个await表达式。await表达式会暂停整个async函数的执行进程并出让 其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。使用async / await关键字就可以在异步代码中使用普通的try / catch代码块。
await关键字只在async函数内有效。如果你在async函数体之外使用它,就会抛出语法错误 SyntaxError 。
async/await的目的为了简化使用基于promise的API时所需的语法。async/await的行为就好像搭配使用了生成器和promise。
async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。
await
await 操作符用于等待一个Promise 对象。它只能在异步函数async function 中使用。
- 语法
[返回值] = await 表达式;
- 表达式
一个 Promise 对象或者任何要等待的值。
-
返回值 返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。 -
描述
await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function 。
若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。 另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。
更多请查看async和await
|