首頁 >web前端 >js教程 >在「Promise」建構函式中使用「async/await」是反模式嗎?

在「Promise」建構函式中使用「async/await」是反模式嗎?

DDD
DDD原創
2024-12-18 22:00:16524瀏覽

Is Using `async/await` Inside a `Promise` Constructor an Anti-Pattern?

在新的 Promise() 建構子中使用 async/await 是反模式嗎?

非同步程式設計可能具有挑戰性,特別是在處理巢狀回調時。為了簡化這一點,ES6 引入了 async/await 語法。但是,在 new Promise() 的建構子中使用 async/await 時,需要小心。

在提供的範例中:

return new Promise(async (resolve, reject) => {
  eachLimit((await getAsyncArray), 500, (item, callback) => {
    // do other things that use native promises.
  }, (error) => {
    if (error) return reject(error);
    // resolve here passing the next value.
  });
});

您正在使用 wait 呼叫 getAsyncArray ,它傳回一個 Promise,但在 Promise 建構函數的執行器函數內。這被稱為「Promise 建構函式反模式」。

此模式的主要危險是錯誤可能無法正確處理。非同步性可能會產生不可預測的行為,而利用 async/await 會使發現潛在問題變得更加困難。

例如,getAsyncArray 函數中的拼字錯誤會導致 TypeError,但它可能不會被eachLimit 回呼捕獲錯誤處理。但是,如果刪除 async/await,則錯誤將被拋出到 Promise 構造函數之外並進行適當處理。

總之,雖然在 Promise() 的建構子中使用 async/await 可能看起來很方便,由於潛在的錯誤處理問題,它是一種反模式。相反,請考慮在 Promise 建構函數之外使用 async/await 以確保正確的錯誤傳播和程式碼可維護性。

以上是在「Promise」建構函式中使用「async/await」是反模式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn