Async和Await

1、概述

async(异步) 函数变体

以下是已经存在的异步函数变体。请注意无处不在的 async 关键字。

  • 异步函数声明: async function foo() {}
  • 异步函数表达式: const foo = async function () {};
  • 异步函数定义:let obj = { async foo() {} }
  • 异步箭头函数: const foo = async () => {};

async(异步) 函数总是返回 Promises

async(异步) 函数的 Promise 完成状态:

    async function asyncFunc() {
    return 123;
    }
    asyncFunc()
    .then(x => console.log(x));
    // 123

async(异步) 函数的 Promise 拒绝状态:

    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(异步) 返回值:
    async function asyncFunc() {
    const result = await otherAsyncFunc();
    console.log(result);
    }
    // 等价于:
    function asyncFunc() {
    return otherAsyncFunc()
    .then(result => {
    console.log(result);
    });
    }

按顺序处理多个 async(异步) 返回值:

    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(异步) 返回值:

    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);
    });
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文连接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean阅读 9,749评论 0 7
  • 回调地狱 回调地狱嵌套多个方法调用会创建错综复杂的代码,会难以理解与调试。当想要实现更复杂的功能时,回调函数也会存...
    Inlight先森阅读 7,799评论 0 4
  • 浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...
    小小的白菜阅读 9,118评论 0 2
  • 我对喝茶谈不上会,更谈不上懂,只是由衷的喜欢。 我对茶的喜欢,缘于我的爷爷,在我很小的时候,就偎依在爷爷身旁,陪爷...
    快乐背包客阅读 3,345评论 0 1
  • 这两天在读王芳老师的《最好的方法读唐诗》。这本书之前就读过几篇,感觉她写的确实不错。不仅语言通俗易懂,幽默风趣,关...
    向日葵悦读阅读 2,839评论 0 0

友情链接更多精彩内容