Promise 提供了一種處理非同步操作的機制,允許開發人員將它們連結在一起並傳遞錯誤或結果。然而,了解 Promise 如何處理錯誤以有效地利用它們非常重要。
在提供的範例中:
promise1.then(...) promise2.then(...) promise3.then(...)
每個 then 都不會暗示依賴先前承諾的成功解決。相反,它意味著依賴前面的 Promise 的解析,無論它是履行還是拒絕。
Promise 中不會自動處理錯誤處理。如果開發人員希望處理錯誤,則有責任為每個 then 附加錯誤處理程序。
在範例中,promise1 處理錯誤,但promise2 和promise3 不處理。因此,當 d1 因錯誤而拒絕時,promise1 會記錄錯誤並傳回它,但promise2和promise3會接收promise1的錯誤處理程序的結果(未定義)並將其視為已履行的promise。
處理錯誤正確地,必須:
假設 Promise 鏈會自動傳播錯誤是錯誤的。如果錯誤沒有被明確處理和重新傳播,後續的 Promise 將不會收到它。這就是為什麼錯誤處理程序在 Promise 中至關重要。
要正確傳播錯誤,可以如下修改範例:
var d1 = d(); var promise1 = d1.promise.then( function(wins) { return wins;}, function(err) { throw err;}); var promise2 = promise1.then( function(wins) { return wins;}, function(err) { throw err;}); var promise3 = promise2.then( function(wins) { return wins;}, function(err) { throw err;}); d1.reject(new Error());
透過此修改,錯誤將透過鏈傳播,並且所有承諾都將
了解Promise 如何處理錯誤對於非同步操作中的有效錯誤處理至關重要。明確附加錯誤處理程序、重新拋出錯誤以進行傳播或返回被拒絕的承諾以正確處理失敗並維護承諾鏈的完整性至關重要。
以上是Promise 如何處理錯誤並透過鏈傳播它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!