angularjs检查2个承诺是否已经返回

时间:2014-08-20 16:33:20

标签: javascript angularjs angular-promise

我有一种情况,我希望在每个承诺返回时做事情,并在两者都返回时做其他事情。

promise1.then(function() { // do stuff })

promise2.then(function() { // do stuff })

$q.all([promise1, promise2]).then(function () { 
   var dependsOnBoth = promise1.x && promise2.x;
})

我想知道重复承诺是否会重复调用,如果有更好的方法可以确保两者都完成了。谢谢!

2 个答案:

答案 0 :(得分:0)

然后函数按照它们添加到promise中的顺序解析,因此在调用all.then之前将调用各个thens。每个只会被调用一次,所以这可能是处理它的最好方法。

当然,你总是可以把所有后处理都放在所有路线上,因为它会在两者之后发生。

另外:不要忘记错误回调。

答案 1 :(得分:0)

因为您在每个承诺上调用然后,而在两个承诺上再次调用$ q.all。每个承诺都会被调用两次。

选项一:
你会知道,每个承诺何时得到解决。所以,不要在每个承诺上打电话。只能在$ q.all中调用它。

var promise1 = function(){
 var promise1defered = $q.defer();

    // promise1 is resolved here.
    promise1defered .resolve();

   return promise1defered .promise;
}

var promise2 = function(){
var promise2defered = $q.defer();

    // promise2 is resolved here.
    promise2defered .resolve();

    return promise2defered .promise;
}

$q.all([promise1, promise2]).then(function () { 
  // Both promises are resolved here
})

选项二:
而不是使用$ q.all,去链接承诺。

var promise2 = promise1.then(function(){  


     // promise1 completed 
    // Resolve promise2 here
]);

promise2.then(function(){  

    // promise 2 completed
    // Both promise 1 and promise 2 are completed. 

});