首頁 > web前端 > js教程 > 為什麼在 Promise 建構函式中嵌套 `async/await` 是一種反模式?

為什麼在 Promise 建構函式中嵌套 `async/await` 是一種反模式?

Mary-Kate Olsen
發布: 2024-12-16 13:49:12
原創
642 人瀏覽過

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

Promise 構造函數中嵌套async/await 的反模式

在本例中,使用async.eachLimit 函數來管理並發操作的數量,就會出現一個困境。最初的誘惑是將程式碼構造如下:

function myFunction() {
  return new Promise(async (resolve, reject) => {
    eachLimit((await getAsyncArray), 500, (item, callback) => {
      // Operations using native promises
    }, (error) => {
      if (error) return reject(error);
      // Resolve with the next value
    });
  });
}
登入後複製

雖然將“myFunction”函數聲明為非同步似乎合乎邏輯,但這是不可行的,因為“eachLimit”函數的內部回調仍然存在無法訪問。然而,這種方法有一個重大缺陷:可能存在未處理的錯誤。

這種方法是反模式的教科書範例,涉及在另一個 Promise 的建構子中使用 Promise。在這種情況下,未處理錯誤的風險尤其嚴重。為了避免這種情況,請考慮以下程式碼片段:

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.
登入後複製

在這種情況下,雖然第一行拋出異常,但非同步箭頭函數的「catch」區塊會妥善處理該錯誤。正確的錯誤處理對於保持穩定性並防止在程式碼庫中出現意外行為至關重要。

以上是為什麼在 Promise 建構函式中嵌套 `async/await` 是一種反模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板