await 操作符被用于等待由一个async function返回的一个Promise。
语法
[return_value] = await expression;
- 表达式
- 一个
Promise或者 任何等待解析的值。 - 返回值
-
返回 promise 的解析值,如果不是 promise,则返回值本身。
描述
await 表达式会造成异步函数停止执行并且等待 promise 的解决,当值被 resolved,异步函数会恢复执行以及返回 resolved 值。如果该值不是一个 promise,它将会被转换成一个 resolved 后的 promise。
如果 promise 被 rejected,await 表达式会抛出异常值。
例子
如果一个 Promise 被传递到一个 await 表达,它会等待 Promise 的解析并返回解析的的值。
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
如果该值不是一个 Promise,它将该值转换为已解决的Promise,并等待它。
async function f2() {
var y = await 20;
console.log(y); // 20
}
f2();
如果 promise 被拒绝,则拒绝的值被抛出。
async function f3() {
try {
var z = await Promise.reject(30);
} catch (e) {
console.log(e); // 30
}
}
f3();
规范
| Specification | Status | Comment |
|---|---|---|
| ECMAScript Async Functions async function |
Draft | 提案 |
浏览器兼容性
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| 基本支持 | 55 | 52.0 (52.0) | ? | ? | 42 | ? |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| 基本支持 | 未实现 | 未实现 | 52.0 (52.0) | ? | 42 | ? | 55 |
See also
async 函数async 函数表达式AsyncFunctionobject