Async和Await

1、概述

async(異步) 函數(shù)變體

以下是已經(jīng)存在的異步函數(shù)變體。請注意無處不在的 async 關鍵字。

  • 異步函數(shù)聲明: async function foo() {}
  • 異步函數(shù)表達式: const foo = async function () {};
  • 異步函數(shù)定義:let obj = { async foo() {} }
  • 異步箭頭函數(shù): const foo = async () => {};

async(異步) 函數(shù)總是返回 Promises

async(異步) 函數(shù)的 Promise 完成狀態(tài):

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

async(異步) 函數(shù)的 Promise 拒絕狀態(tài):

    async function asyncFunc() {
    throw new Error('Problem!');
    }
    asyncFunc()
    .catch(err => console.log(err));
    // Error: Problem!

通過 await 處理 async(異步) 計算的結果和錯誤

await(只允許在 async(異步) 函數(shù)內部使用)等待其操作對象 Promise 返回:

  • 如果 Promise 是完成狀態(tài),await 的結果是完成態(tài)的值。
  • 如果 Promise 是拒絕狀態(tài),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);
    });
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 原文連接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean閱讀 4,365評論 0 7
  • 回調地獄 回調地獄嵌套多個方法調用會創(chuàng)建錯綜復雜的代碼,會難以理解與調試。當想要實現(xiàn)更復雜的功能時,回調函數(shù)也會存...
    Inlight先森閱讀 2,896評論 0 4
  • 淺談Async/Await用 async/await 來處理異步 async和await async:聲明一個異步...
    小小的白菜閱讀 3,805評論 0 2
  • 我對喝茶談不上會,更談不上懂,只是由衷的喜歡。 我對茶的喜歡,緣于我的爺爺,在我很小的時候,就偎依在爺爺身旁,陪爺...
    快樂背包客閱讀 527評論 0 1
  • 這兩天在讀王芳老師的《最好的方法讀唐詩》。這本書之前就讀過幾篇,感覺她寫的確實不錯。不僅語言通俗易懂,幽默風趣,關...
    向日葵悅讀閱讀 387評論 0 0

友情鏈接更多精彩內容