在 Bluebird Promise 文档中,.then(success, 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中文网其他相关文章!