如何使用嵌套的promises触发单个错误处理程序?

5 node.js promise q

为什么没有任何deferred.reject()调用.fail()在最后触发处理程序?如何使用嵌套的promises触发单个错误处理程序?我需要嵌套的promises for closure.

当我触发拒绝时d1,它仍然一直到解决/拒绝d2.如果我添加.fail()到块中d1,那么它确实可以捕获拒绝.但这就是我想要避免的,.fail()每个嵌套承诺的处理程序.

var Q = require('q');

somePromise().then(function (v1) {

  var d1 = Q.defer();

  asyncFunc1(v2, function (err, v3) {
    if (!v3) 
      d1.reject(new Error('error'));
    else
      d1.resolve(true);

    return d1.promise.then(function (promise1Kept) {
      var d2 = Q.defer();
      asyncFunc2(v4, function (err, v5) {
        if (!v5)
          d2.reject(new Error('error'));
        else
          d2.resolve(true);
      });
      return d2.promise.then(function (promise2Kept) {
        console.log('end of promise chain');
      });
    });
  });
}).fail(function (err) {
  console.log('Error!');
  console.log(err);
});
Run Code Online (Sandbox Code Playgroud)