异步函数

Seven 2022-02-17 13:49:06
Categories: > Tags:

async 函数是使用async关键字声明的函数。 async 函数是AsyncFunction函数的实例,并且其中允许使用await链关键字。asyncawait让关键字我们可以用一种更多的方式写出基于Promise异步地的行为,而独立刻意式调用promise

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}

async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}

asyncCall();

语法

1
2
3
async function name([param[, param[, ... param]]]) {
statements
}

参数

1
name

函数名称。

1
param

要传递给函数的参数的名称。

1
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中。

参考文档: