async-function-await
语法
1 | async function name([param[, param[, ... param]]]) { statements } |
返回值
一个返回的Promise
对象会以async function
的返回值进行解析(resolved
),或者以该函数抛出的异常进行回绝(rejected
)。
描述
当调用一个 async
函数时,会返回一个 Promise
对象。
- 当这个
async
函数返回一个值时,Promise
的resolve
方法会负责传递这个值; - 当
async
函数抛出异常时,Promise
的reject
方法也会传递这个异常值。
async
函数中可能会有 await
表达式,这会使 async
函数暂停执行,等待 Promise
的结果出来,然后恢复async
函数的执行并返回解析值(resolved
或reject
)。
注意, await
关键字仅仅在 async function
中有效。如果在 async function
函数体外使用 await
(没有在async
中使用),你只会得到一个语法错误(SyntaxError
)。
async/await
的用途是简化使用promises
异步调用的操作,并对一组Promises
执行某些操作。
正如Promises
类似于结构化回调,async/await
类似于组合生成器和promises
。
不要将await
和Promise.then
混淆
示例
通过async方法重写 promise 链
返回 Promise的
API 将会被用于 promise
链,它会将函数分成若干部分。例如下面代码:
1 | function getProcessedData(url) { |
可以通过如下所示的一个async
函数重写:
1 | async function getProcessedData(url) { |
注意,在上述示例中,return
语句中没有 await
操作符,因为 async function
的返回值将被隐式地传递给Promise.resolve
。
await
await
操作符用于等待一个Promise
对象。它只能在异步函数 async function
中使用。
语法
1 | [return_value] = await expression; |
表达式
一个 Promise
对象或者任何要等待的值。
返回值
返回 Promise
对象的处理结果。如果等待的不是 Promise
对象,则返回该值本身。
描述
await
表达式会暂停当前 async function
的执行,等待 Promise
处理完成。
- 若
Promise
正常处理(fulfilled
),其回调的resolve
函数参数作为await
表达式的值,继续执行async function
。 - 若
Promise
处理异常(rejected
),await
表达式会把Promise
的异常原因抛出。
另外,如果 await
操作符后的表达式的值不是一个 Promise
,则返回该值本身。 (await
不会包装值为Promise
)