首頁 >web前端 >js教程 >為什麼 `.then(success, failed)` 被認為是 Promise 處理中的反模式?

為什麼 `.then(success, failed)` 被認為是 Promise 處理中的反模式?

Barbara Streisand
Barbara Streisand原創
2024-12-25 18:42:14766瀏覽

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

使用.then(success, failed) 進行Promise 處理的缺點

問題:

在Bluebird Promise 文件中,.then(success,then fail) 被標記為反模式。這背後的原因是什麼?

答案:

與推薦的.then(success).catch(fail) 連結不同,使用.then(success, failure) 會帶來控制流問題:

  • 如果成功回呼中出現錯誤,則會傳播到下一個.catch()處理程序,有效地跳過失敗回調。

控制流比較:

使用 .then(success, failed):

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

使用.then(success).catch(fail):

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}

基本原理:

不鼓勵使用反模式,因為它將錯誤處理限制為單一最終catch 處理程序。但是,它在以下情況下很有用:

  • 您想要在特定回調步驟中處理錯誤。
  • 您需要對錯誤和非錯誤情況進行不同的處理(分支控制流)。

細化:

為了避免重複回調,可以使用以下模式:

some_promise_call()
   .catch(function(e) {
       return e; // it's OK, we'll just log it
   })
   .done(function(res) {
       logger.log(res);
   });

或者,您可以利用.finally() 方法來實現此目的。

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

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