Node.js 如何使用嵌套承诺触发单个错误处理程序?
为什么任何Node.js 如何使用嵌套承诺触发单个错误处理程序?,node.js,promise,q,Node.js,Promise,Q,为什么任何deferred.reject()调用都不会在最后触发.fail()处理程序?如何使用嵌套承诺触发单个错误处理程序?我需要一系列关于结束的承诺 当我在d1上触发拒绝时,它仍然会一直到d2的解析/拒绝。如果我将.fail()添加到d1的块中,那么它会捕获拒绝。但这正是我试图避免的,每个嵌套承诺都有一个.fail()处理程序 var Q=require('Q'); somePromise().then(函数(v1){ var d1=Q.defer(); asyncFunc1(v2,函数(e
deferred.reject()
调用都不会在最后触发.fail()
处理程序?如何使用嵌套承诺触发单个错误处理程序?我需要一系列关于结束的承诺
当我在d1
上触发拒绝时,它仍然会一直到d2
的解析/拒绝。如果我将.fail()
添加到d1
的块中,那么它会捕获拒绝。但这正是我试图避免的,每个嵌套承诺都有一个.fail()
处理程序
var Q=require('Q');
somePromise().then(函数(v1){
var d1=Q.defer();
asyncFunc1(v2,函数(err,v3){
如果(!v3)
d1.拒绝(新错误(“错误”));
其他的
d1.决议(真实);
返回d1.promise.then(功能(promise1Kept){
var d2=Q.defer();
asyncFunc2(v4,函数(err,v5){
如果(!v5)
d2.拒绝(新错误(“错误”));
其他的
d2.决议(正确);
});
返回d2.promise.then(功能(promise2Kept){
console.log(“承诺链的末端”);
});
});
});
}).失败(功能(错误){
console.log('Error!');
控制台日志(err);
});
不要将回调和承诺混为一谈,也不要使用延迟。正如您所注意到的,当您需要手动执行所有操作时,很容易将链搞乱
var Q = require('q');
var func1 = Q.denodeify(asyncFunc1);
var func2 = Q.denodeify(asyncFunc2);
somePromise().then(function (v1) {
return func1(v2);
}).then(function (v3) {
if (!v3) throw new Error("error");
return func2(v4);
}).then(function (v5) {
if (!v5) throw new Error("error");
console.log("end of promise chain");
}).fail(function (err) {
console.log('Error!');
console.log(err);
});
运行此操作时会得到什么输出?@user568109添加了更多详细信息并修复了一些打字错误。您能告诉我为什么不希望
失败吗?执行errorhandler是必需的(这或然后是)。默认情况下没有errorhandler。它将刚好到达错误并停止。