我有一种情况,我希望在每个承诺返回时做事情,并在两者都返回时做其他事情。
promise1.then(function() { // do stuff })
promise2.then(function() { // do stuff })
$q.all([promise1, promise2]).then(function () {
var dependsOnBoth = promise1.x && promise2.x;
})
我想知道重复承诺是否会重复调用,如果有更好的方法可以确保两者都完成了。谢谢!
答案 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.
});