Promise.all 中的錯誤處理
使用 Promise 陣列時,Promise.all 允許同時解析它們。然而,如果其中一個 Promise 發生錯誤,整個鏈就會被拒絕,從而掩蓋其他成功的解決方案。本文解決了在 Promise.all 鏈中有效處理單一 Promise 錯誤的挑戰。
Promise.all 遵循「全有或全無」原則。它要么使用包含所有 Promise 解析值的陣列進行解析,要么在單一 Promise 遇到錯誤時立即被拒絕。因此,其他 Promise 中可能發生的任何錯誤都不會被注意到。
為了處理單一 Promise 錯誤,一些函式庫提供了替代方案,例如 Promise.when,它等待數組中所有 Promise 的解決或拒絕。然而,我們將重點放在使用 JavaScript 原生 Promise.all 的更常見方法。
在提供的程式碼中,使用者嘗試加入 catch 語句來攔截各個 Promise 錯誤,但不幸的是,catch 區塊並沒有不啟動。以下是應該解決問題的程式碼的修改版本:
existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler() .then(function(data) { return data; }) .catch(function(err) { return err; }); }); return Promise.all(arrayOfPromises) }); existingPromiseChain.then(function(arrayResolved) { // Process resolved values or errors from the Promises }); // Always terminate the promise chain with a catch to capture any potential errors .catch(function(err) { console.log(err.message); // Log error message if any coding error occurred });
此修改後的程式碼使用 then/catch 區塊包裝每個 Promise (route.handler.promiseHandler())。如果發生錯誤,catch 區塊會傳回錯誤對象,然後將其包含在 Promise.all 解析的陣列中。
透過遵循 Promise.all 的全有或全無行為,這種方法使我們能夠優雅地處理單一 Promise 錯誤,同時仍獲得同時 Promise 解析的好處。因此,開發人員可以自信地處理應用程式中的 Promise 錯誤,而不會失去 Promise.all 提供的優勢。
以上是如何處理 Promise.all 鏈中的單一 Promise 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!