【发布时间】:2014-08-30 23:41:22
【问题描述】:
我查看了bluebird promise FAQ,其中提到了.then(success, fail) is an antipattern。我不太明白它对try 和catch 的解释。
以下有什么问题?
some_promise_call()
.then(function(res) { logger.log(res) }, function(err) { logger.log(err) })
似乎该示例表明以下是正确的方法。
some_promise_call()
.then(function(res) { logger.log(res) })
.catch(function(err) { logger.log(err) })
有什么区别?
【问题讨论】:
-
then().catch()更具可读性,因为您无需查找逗号并调查此回调是否为成功或失败分支。 -
@KrzysztofSafjanowski - 被“看起来更好”的论点所摧毁。完全错误!
-
@AndreyPopov 你在哪里看到“看起来更好”?请阅读下一个答案以及更易读的
.then(function(res) { logger.log(res) }, function(err) { logger.log(err) })或.then(function(res) { logger.log(res) }).catch( function(err) { logger.log(err) }) -
注意: 当您使用
.catch时,您不知道是哪一步导致了问题 - 在最后一个then内或承诺链上的其他位置。所以它确实有它自己的缺点。 -
我总是将函数名称添加到 promise .then() 参数中以使其可读,即
some_promise_call() .then(function fulfilled(res) { logger.log(res) }, function rejected(err) { logger.log(err) })
标签: javascript node.js promise bluebird