首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

async function

async function?函数声明将定义一个异步函数返回AsyncFunction对象。

你还可以使用?async function 函数表达式 来定义异步函数。

语法

代码语言:javascript
复制
async function name([param[, param[, ... param]]]) {
   statements
}

参数

name函数名称。param要传递给函数的参数的名称。statements函数体语句。

返回值

一个AsyncFunction对象,表示一个异步函数。

描述

调用async函数时会返回一个Promise对象。当这个?async函数返回一个值时,Promise的 resolve 方法会负责传递这个值;当async函数抛出异常时,Promise的 reject 方法也会传递这个异常值。

async函数中可能会有await表达式,这会使async函数暂停执行,等待表达式中的?Promise?解析完成后继续执行async函数并返回解决结果。

async/await的目的是在 promises 的基础上进一步简化异步的同步调用,它能对一组Promises执行一些操作。正如Promises类似于结构化回调,async/await类似于组合生成器和 promises。

示例

简单例子

代码语言:javascript
复制
function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}


async function add1(x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
}

add1(10).then(v => {
  console.log(v);  // prints 60 after 4 seconds.
});


async function add2(x) {
  const p_a = resolveAfter2Seconds(20);
  const p_b = resolveAfter2Seconds(30);
  return x + await p_a + await p_b;
}

add2(10).then(v => {
  console.log(v);  // prints 60 after 2 seconds.
});

通过async方法重写 promise 链

返回Promise的 API 将会被用于 promise 链,它会将函数分成若干部分。例如下面代码:

代码语言:javascript
复制
function getProcessedData(url) {
  return downloadData(url) // returns a promise
    .catch(e => {
      return downloadFallbackData(url); // returns a promise
    })
    .then(v => {
      return processDataInWorker(v); // returns a promise
    });
}

可以通过如下所示的一个async函数重写:

代码语言:javascript
复制
async function getProcessedData(url) {
  let v;
  try {
    v = await downloadData(url); 
  } catch(e) {
    v = await downloadFallbackData(url);
  }
  return processDataInWorker(v);
}

注意,在上述示例中,return语句中没有await操作符,因为async function的返回值将隐式传递给Promise.resolve

规范

Specification

Status

Comment

ECMAScript Latest Draft (ECMA-262)The definition of 'async function' in that specification.

Living Standard

Initial definition in ES2017.

ECMAScript 2017 (ECMA-262)The definition of 'async function' in that specification.

Standard

?

浏览器兼容性

Feature

Chrome

Edge

Firefox (Gecko)

Internet Explorer

Opera

Safari (WebKit)

Basic support

55

(Yes)

52.0 (52.0)

?

42

10.1

Feature

Android

Android Webview

Edge

Firefox Mobile (Gecko)

IE Mobile

Opera Mobile

Safari Mobile

Chrome for Android

Basic support

(Yes)

(Yes)

(Yes)

52.0 (52.0)

?

42

10.1

55

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com