包含内部操作的AngularJS中的同时异步请求

ROM*_*eer 3 javascript asynchronous xmlhttprequest simultaneous angularjs

如何在AngularJS中创建2个同时发生的异步请求,其中一个操作必须在第一个请求之后完成?

我想做这样的事情:

  • 调用第一个Web服务(接收x)
  • 调用第二个Web服务(接收y)
  • 在收到第一个Web服务的响应后执行某些操作(f(x))
  • 我有两个数据后做一些事情(g(x,y))

以下方法:

 $q.all({
    x: $http.get('http://resourceX'),
    y: $http.get('http://resourceY')
}).then(function(results) {
    $scope.a = f(results.x.data);   // where to place this line ?
    $scope.z = g(results.x.data, results.y.data);
});
Run Code Online (Sandbox Code Playgroud)

效率高,因为即使收到resourceX,它也在等待resourceY.

我想在x可用时调用函数f,并在x和y可用时调用函数g.

我想要的伪代码如下所示:

$q.all({
    x: $http.get('http://resourceX'),
    y: $http.get('http://resourceY')
}).when(x is ready) {
    $scope.a = f(results.x.data);
}).then(function(results) {     
    $scope.z = g(results.x.data, results.y.data);
});
Run Code Online (Sandbox Code Playgroud)

所以,我希望在$ q.all方法和.之间有性能组合

$http.get('http://resourceX').success(function(x) { 
    $scope.a = f(x);
    $http.get('http://resourceY').succes(function(y){
        $scope.z = g(x, y);     
    });
});
Run Code Online (Sandbox Code Playgroud)

Dav*_*nek 6

您可以通过以下方式分离呼叫:

var promiseX = $http.get('http://resourceX');
var promiseY = $http.get('http://resourceY');

promiseX.then(function(result {
    $scope.a = f(result.data);
});

$q.all({
    x: promiseX,
    y: promiseY
}).then(function(results) {
    $scope.z = g(results.x.data, results.y.data);
});
Run Code Online (Sandbox Code Playgroud)