async(异步) 函数变体
以下是已经存在的异步函数变体。请注意无处不在的 async
关键字。
- 异步函数声明:
async function foo() {}
- 异步函数表达式:
const foo = async function () {};
- 异步函数定义:
let obj = { async foo() {} }
- 异步箭头函数:
const foo = async () => {};
async(异步) 函数总是返回 Promises
async(异步) 函数的 Promise 完成状态:
JavaScript 代码:
- async function asyncFunc() {
- return 123;
- }
- asyncFunc()
- .then(x => console.log(x));
- // 123
async(异步) 函数的 Promise 拒绝状态:
JavaScript 代码:
- async function asyncFunc() {
- throw new Error('Problem!');
- }
- asyncFunc()
- .catch(err => console.log(err));
- // Error: Problem!
通过 await
处理 async(异步) 计算的结果和错误
await
(只允许在 async(异步) 函数内部使用)等待其操作对象 Promise 返回:
- 如果 Promise 是完成状态,
await
的结果是完成态的值。 - 如果 Promise 是拒绝状态,
await
会抛出拒绝值。
处理单个 async(异步) 返回值:
JavaScript 代码:
- async function asyncFunc() {
- const result = await otherAsyncFunc();
- console.log(result);
- }
- // 等价于:
- function asyncFunc() {
- return otherAsyncFunc()
- .then(result => {
- console.log(result);
- });
- }
按顺序处理多个 async(异步) 返回值:
JavaScript 代码:
- async function asyncFunc() {
- const result1 = await otherAsyncFunc1();
- console.log(result1);
- const result2 = await otherAsyncFunc2();
- console.log(result2);
- }
- // 等价于:
- function asyncFunc() {
- return otherAsyncFunc1()
- .then(result1 => {
- console.log(result1);
- return otherAsyncFunc2();
- })
- .then(result2 => {
- console.log(result2);
- });
- }
并行处理多个 async(异步) 返回值:
JavaScript 代码:
- async function asyncFunc() {
- const [result1, result2] = await Promise.all([
- otherAsyncFunc1(),
- otherAsyncFunc2(),
- ]);
- console.log(result1, result2);
- }
- // 等价于:
- function asyncFunc() {
- return Promise.all([
- otherAsyncFunc1(),
- otherAsyncFunc2(),
- ])
- .then([result1, result2] => {
- console.log(result1, result2);
- });
- }
错误处理:
JavaScript 代码:
- async function asyncFunc() {
- try {
- await otherAsyncFunc();
- } catch (err) {
- console.error(err);
- }
- }
- // 等价于:
- function asyncFunc() {
- return otherAsyncFunc()
- .catch(err => {
- console.error(err);
- });
- }