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