如果一个承诺失败,$q.all() 不调用失败处理程序

$q.all() not calling fail handler if one promise fails

只是想了解 $q.all() 的工作原理:

在我的示例中,我使用 $q.all() 来执行 2 个函数(都是故意 return reject() ),我希望 fail 处理程序在 then() 被调用,但没有调用,为什么会这样?

代码:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope,$q) {


    f1 = function(){
        return $q.defer().reject();
    }

    f2 = function(){
        return $q.defer().reject();
    }
    s = function(){alert('success!'); };
    f = function(){alert('failed!');};
    $q.all([f1(),f2()]).then(s,f);
}

Fiddle:

http://jsfiddle.net/sajjansarkar/ADukg/10942/


编辑:

我发现如果我将函数 return 设为原始 promise 并在拒绝它之前引入延迟,则相同的代码可以工作。

Fiddle

应该是:

   f2 = function(){
      var p = $q.defer();
      p.reject();
      return p.promise;
    }

f2 = function() {
 return $q.reject()
}