await  操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。

语法

[return_value] = await expression;
表达式
一个 Promise 对象或者任何要等待的值。
返回值

返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

描述

await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其处理结果作为 await 表达式的值,继续执行 async function

若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。

另外,如果 await 操作符后的表达式的值不是一个 Promise,那么该值将被转换为一个已正常处理的 Promise。

例子

如果一个 Promise 被传递给一个 await 操作符,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,await 会把该值转换为已正常处理的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

文档标签和贡献者

 此页面的贡献者: shhider, xgqfrms-GitHub, chenlexing, x-cold, liuqipeng417
 最后编辑者: shhider,