Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用嵌套承诺触发单个错误处理程序?_Node.js_Promise_Q - Fatal编程技术网

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。它将刚好到达错误并停止。