AngularJS:多重承诺等待所有

时间:2014-04-28 14:09:25

标签: angularjs promise

我对多重承诺有一点疑问。 我怎么能等待所有的承诺都能完成,以便返回最终的结果。

请参阅我的代码:

getInfo : function(){
        return promiseA.then(function(result){
               info  = result;
               //this function have also promises 
               return ServiceA.functionA(info.login)
                      .then(function(favouriteItems){
                          info.favorites = favouriteItems;
                          return $q.when(info);
                       });      
         });       
},

我的目标是在返回值之前等待ServiceA.functionA的结果。

由于

K.L

4 个答案:

答案 0 :(得分:1)

您需要使用$q.all()

这是关于这个问题的好帖子:stackoverflow.com/questions/21310964/angularjs-q-all

答案 1 :(得分:1)

我使用$ q.all方法写了另一个问题的答案,说明了这个问题的解决方案。

检查出来:AngularJS: Listen to events, one after the other

答案 2 :(得分:0)

function getInfo() {
  var deferred = $q.defer();

  promiseA.then(function(result){
    info  = result;
    // this function have also promises 
    ServiceA.functionA(info.login)
      .then(function(favouriteItems){
         info.favorites = favouriteItems;
           // the magic
           deferred.resolve(info);
           // at this point, you can resolve any value
      });      
    });
  }

  return deferred.promise;
}

然后你可以调用该函数并获得一个承诺......

var promise = getInfo();
promise.then(successCallback, errorCallback, notifyCallback);

只有在延迟对象上调用successCallback后才会调用resolve

答案 3 :(得分:0)

getInfo : function() {
  return promiseA.then(function(result){           
    return ServiceA.functionA(result.login).then(function(favouriteItems){
      result.favorites = favouriteItems;
      return result;
    });      
  });       
},

像这样使用:

api.getInfo().then(function(result){
  // use result and result.favorites
}, function(err){
  // here you can be if an error occurred in promiseA or in ServiceA.functionA
})