如何"加入"有角度的2个网络请求

时间:2018-06-15 11:12:08

标签: javascript angularjs performance asp.net-web-api

我尝试合并来自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并等待它们的答案吗? 承诺可以成为解决方案吗?

2 个答案:

答案 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以及它可以做什么:

https://toddmotto.com/promises-angular-q