首頁 >web前端 >js教程 >為什麼 `.then(success, failure)` 是 JavaScript Promise 中的反模式?

為什麼 `.then(success, failure)` 是 JavaScript Promise 中的反模式?

DDD
DDD原創
2024-12-31 16:45:09184瀏覽

Why is `.then(success, fail)` an Antipattern in JavaScript Promises?

反模式:Promise 中的.then(success, failed)

避免.then(success, failed) 的論證

Bluebird 承諾常見問題建議不要使用.then(success,失敗)作為反模式。雖然try-catch 區塊看起來相似,但存在差異:

控制流差異:

.then(success, failure) 回傳一個將被拒絕的承諾,如果成功回調會拋出錯誤。這意味著如果成功記錄器失敗,錯誤將傳遞給 .catch() 回調,而不是失敗回呼。

控制流程圖:

[然後用兩個參數](https://i.sstatic.net/WAcpP.png)

[Then-catch chain](https://i.sstatic.net/wX5mr.png)

同步等效:

// then: { try ... catch(e) { ... } else ... }
try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results);

處理異常:

處理異常:

處理異常:

  • 處理異常:
  • .catch()記錄器還將處理成功的異常記錄器調用,提供更全面的錯誤處理機制。

預測反模式的有用性

雖然反模式通常不被鼓勵,但它在以下情況下可能很有用:

您想要處理特定於某個步驟的錯誤

您希望根據是否發生錯誤來採取不同的操作。
some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });

警告:請注意,這種方法會在控制流中引入分支。 替代.then(成功,失敗)為了避免程式碼重複,請考慮使用.catch 和.done:或您可以選擇.finally() 來處理成功和失敗場景。

以上是為什麼 `.then(success, failure)` 是 JavaScript Promise 中的反模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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