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
)呈现回复。这是正确的方法吗?我完全忽视了一些明显的东西吗?
答案 0 :(得分:1)
我假设您的promise链必须在第一次出现错误时中断并且不会从任何错误中恢复,然后在promise链的每个链接上代替错误处理程序,您最后可以添加一个。
我不确定您使用的是哪个承诺库,如果catch
可用,您可以这样做:
asyncFunction1
.then(asyncFunction2)
.then(Function3)
.catch(errorHandlerFunction);
如果没有,那么:
asyncFunction1
.then(asyncFunction2)
.then(Function3)
.then(null, errorHandlerFunction);