多次异步调用后的回调方法

时间:2017-10-26 13:25:49

标签: javascript angularjs asynchronous

在执行行代码之前,有没有办法等待多个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个调用可以异步调用。

这可行吗?

2 个答案:

答案 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...
});