链接然后调用错误回调执行多次

时间:2015-07-22 04:26:50

标签: javascript node.js promise

asyncFunction1
    .then(asyncFunction2, errorHandlerFunction)
    .then(Function3, errorHandlerFunction);

我正在开发一个节点API应用程序,我正在使用上面的then(使用promised-io)序列。我遇到链式then语句的问题。我有一个公共errorHandlerFunction,它传递了一个错误代码,用于呈现错误的json响应。像 -

这样的东西
var errorHandlerFunction = function(error_code) {
  res.json(message_for_error_code);
};

我遇到的问题是当asyncFunction1函数被拒绝时,它会调用errorHandlerFunction方法两次。从日志中,第一次绕过它会正确呈现json响应。它被第二次调用(被undefined拒绝),这会抛出错误。如何确保errorHandlerFunction在运行一次后退出?

我猜我可以在undefined中检查errorHandlerFunction,并仅针对有效error_code(不是undefined)呈现回复。这是正确的方法吗?我完全忽视了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

我假设您的promise链必须在第一次出现错误时中断并且不会从任何错误中恢复,然后在promise链的每个链接上代替错误处理程序,您最后可以添加一个。

我不确定您使用的是哪个承诺库,如果catch可用,您可以这样做:

asyncFunction1
    .then(asyncFunction2)
    .then(Function3)
    .catch(errorHandlerFunction);

如果没有,那么:

asyncFunction1
    .then(asyncFunction2)
    .then(Function3)
    .then(null, errorHandlerFunction);