【发布时间】:2017-05-24 23:19:36
【问题描述】:
我不想为我使用的每一个承诺都输入 .catch。如果不这样做,由 Promise 引起的错误是非常无益的。
纯粹为了这个目的使用像 bluebird 这样的整个库让我感到不舒服。
【问题讨论】:
-
“你使用的每一个承诺”是什么意思?你只需要在链尾
catcherrors。另外,“吞”是什么意思?如果你想防止这种情况发生,错误应该怎么办? -
当使用大量的 Promise 时,将 .catch 放在每条链之后可能会让人筋疲力尽,而且一点也不干。编辑:吞咽我的意思是没有提供错误行或细节。默认情况下,这些错误应该有一个关联的处理程序,在我的情况下,我希望它们显示在我的节点控制台中。
-
除了省略
.catch(function(e) {…})之外,还有其他方法可以使此类代码枯燥无味,这在任何地方都是一样的。你的许多连锁店是从哪里开始的?事件处理程序,路由处理程序?然后定义一个包装函数来安装处理程序并适当地处理返回的 Promise。如果您可以发布您的代码,我将能够写一个更具体的答案。 -
编写没有任何
.catch()处理程序的代码只是糟糕的代码。您不会全局诊断丢失的拒绝处理程序。这不是你如何编写好的代码。您不必在每个承诺上都加上.catch()。尽管我在回答中解释了逻辑,但您应该在每个承诺链上都有一个。如果您是对我的回答投反对票的人,那么对于为您的情况提供正确的编程答案,我深表歉意。你不能按照你要求的方式去做,所以我已经描述了你应该如何处理拒绝。如果您不喜欢这样,那么我可以删除我的答案。 -
@jfriend00,没有注意到你在那里评论。我没有对你投反对票,但不同意这是糟糕的代码。我的目的只是拥有一个默认的错误处理程序,以防止出现许多相同的 .catch。在错误与程序功能或用户体验相关的地方,我有 .catchs 处理错误。然而,在某些情况下,我只想记录错误(到控制台、日志文件或错误数据库)。这没什么不好的:)
标签: javascript node.js promise ecmascript-6 es6-promise