在Bluebird Promise 文件中,.then(success,then fail) 被標記為反模式。這背後的原因是什麼?
與推薦的.then(success).catch(fail) 連結不同,使用.then(success, failure) 會帶來控制流問題:
使用 .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中文網其他相關文章!