我尝试合并来自2个webApis的数据。这样的事情:
$http.get($scope.apiUrl1 + 'GetEmployees').success(function(data1) {
//process data1
$http.get($scope.apiUrl2 + 'GetEmployees2').success(function(data2) {
//process data2
var data = data1.join(data2);
})
})
我对此解决方案的不满意是因为apiUrl2是在第一次请求响应后调用的。
有一种方法可以同时调用两个api并等待它们的答案吗? 承诺可以成为解决方案吗?
答案 0 :(得分:3)
使用$q.all
。首先将$q
注入控制器/
let arr = [$http.get($scope.apiUrl1 + 'GetEmployees'), $http.get($scope.apiUrl2 + 'GetEmployees2')]
$q.all(arr).then(function (response) {
//process data2
var data = response[0].data.concat(response[1].data);
})
答案 1 :(得分:1)
在angularJS中你可以使用$ q.all(),其中每个$ http请求都是一个变量,如下所示:
let get1 = $http.get($scope.apiUrl1 + 'GetEmployees');
let get2 = $http.get($scope.apiUrl2 + 'GetEmployees2');
$q.all([get1, get2]).then(data => {
console.log('the data: ', data);
});
//you can also pass in an object to $q.all, allowing you to refer to the promises by variable name rather than index
$q.all({get1, get2}).then(data => {
console.log('the data: ', data);
});
这是一个很好的综合博客,关于$ q以及它可以做什么: