Javascript angularjs检查是否有2个承诺返回

Javascript angularjs检查是否有2个承诺返回,javascript,angularjs,angular-promise,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; }) 我想知道重复承诺

我有一种情况,当每个人的承诺都回来时,我想做一些事情,当他们都回来时,我想做一些其他的事情

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

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

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

我想知道重复承诺是否会重复电话,是否有更好的方法来确保两者都完成了。谢谢

然后函数按照它们添加到承诺中的顺序进行解析,因此将在调用all.Then之前调用单个thens。然后每个函数只调用一次,因此这可能是处理该问题的最佳方法

当然,你可以把所有的后期处理放在all路线上,因为这两个步骤都会发生

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

因为您正在调用每个承诺,然后再次调用$q。所有这些都是关于两个承诺的。每个承诺都会被要求两次

备选方案一: 你会知道,当每个承诺都解决了。所以,不要每次承诺都打电话。只需要$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. 

});

不,使用all完全可以,只是我不知道你说的promise1.x和promise2.x是什么意思。始终使用回调参数!是的,那是个错误。在我的例子中,promise1是一个返回承诺的服务,promise2是一个api调用。当两个人都回来的时候,我想做点什么,当两个人都回来的时候,我不知道最好的方法,当然,你不能做任何事;apiCall.theny,但需要使用var promise=apiCall;承诺,然后;答应我,特尼。创建一次,多次使用。如果承诺对象实际上只是承诺,而不是返回承诺的方法,那么调用它们没有什么错。然后多次使用它们。foo=Promise.resolve'yay';foo.thenbar1;foo.thenbar2;只需要按顺序调用bar1和bar2一次。请修复您的第一个示例,promise1和promise2是函数,而不是承诺。