避免.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);
處理異常:
處理異常:處理異常:
預測反模式的有用性
雖然反模式通常不被鼓勵,但它在以下情況下可能很有用:
您想要處理特定於某個步驟的錯誤您希望根據是否發生錯誤來採取不同的操作。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中文網其他相關文章!