在执行行代码之前,有没有办法等待多个API调用响应?
通常,我使用:
APIService.call(parameter).then(function(response) {
// Do things
callBack();
});
这样可行,callBack()
在APIService.call()
的答案之后执行。
但是,我们说我有3种不同的API调用:
$scope.var1 = APIService.call1(parameter)
$scope.var2 = APIService.call2(parameter)
$scope.var3 = APIService.call3(parameter)
我希望在回答3个电话后调用我的回叫,这意味着在最长的回答之后。
我怎么能这样做?
我不想制作嵌套的then
,因为我希望我的3个调用可以异步调用。
这可行吗?
答案 0 :(得分:4)
由于您使用的是AngularJS,因此可以使用$q.all。做类似的事情:
var promises = [];
promises.push(APIService.call1(parameter));
promises.push(APIService.call2(parameter));
promises.push(APIService.call3(parameter));
$q.all(promises).then(function (values) {
// you can access the response from each promise
$scope.var1 = values[0];
$scope.var2 = values[1];
$scope.var3 = values[2];
doSomething();
})
答案 1 :(得分:1)
你可以使用$ q.all()方法,简单地传递一个你要解决的promises数组,这样做是为了获取promises数组并返回一个promise,它会在所有原始promise中解析已经解决了。
$q.all([
APIService.call1(parameter),
APIService.call2(parameter),
APIService.call3(parameter),
]).then(function(data) {
//TODO: something...
});