前端多執行緒處理——async/await

xue001發表於2023-10-28

  async 從字面上看就是“非同步”,它放在函式定義之前,是使該函式在呼叫時開一個子執行緒,以不影響主執行緒的執行。

  而 await 經常和 async 組合使用,在 async 定義的函式中來等待需要時間執行的程式碼(如ajax請求、Promise物件)的執行結果,以做後續的處理。

  如下面的返回Promise物件的函式:

function print(delay, message) {    return new Promise(function (resolve, reject) {            // 返回Promise物件
        setTimeout(function () {                               // 延遲執行函式
            console.log(message);            resolve();
        }, delay);
    });
}

  如果需要執行透過,就需要經過then、catch、finally函式來執行響應的程式碼:

print(1000, "First").then(function () {            // 1秒之後輸出“First”
    return print(2000, "Second");                  // 2秒之後輸出“Second”}).then(function () {    return print(1000, "Third");                   // 1秒之後輸出“Third”}).then(function (){    print(2000, "Fourth");                         // 2秒之後輸出“Fourth”});

   而使用 async/await 可以實現同樣的效果,使用非同步操作就像同步操作一樣簡單:

async function asyncFunc() {    await print(1000, "First");    await print(2000, "Second");    await print(1000, "Third");    await print(2000, "Fourth");
}asyncFunc();

  而對於 Promise 中的異常處理,使用 try-catch 來實現:

async function asyncFunc() {    try {        await print(1000, "First");          //1秒後輸出"First"
        });
    } catch (err) {        console.log(err);                    //輸出異常錯誤
    }    try {        await print(2000, "Second");         //2秒後輸出"Second"
        });
    } catch (err) {        console.log(err);                    //輸出異常錯誤
    }    try {        await print(1000, "Third");          //1秒後輸出"Third"
        });
    } catch (err) {        console.log(err);                    //輸出異常錯誤
    }    try {        await print(2000, "Fourth");         //2秒後輸出"Fourd"
        });
    } catch (err) {        console.log(err);                    //輸出異常錯誤
    }
}asyncFunc();


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70034822/viewspace-2991657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章