我对多重承诺有一点疑问。 我怎么能等待所有的承诺都能完成,以便返回最终的结果。
请参阅我的代码:
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
答案 0 :(得分:1)
您需要使用$q.all()
这是关于这个问题的好帖子:stackoverflow.com/questions/21310964/angularjs-q-all
答案 1 :(得分:1)
我使用$ q.all方法写了另一个问题的答案,说明了这个问题的解决方案。
答案 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
})