一尘不染

AngularJS-等待多个资源查询完成

angularjs

我有一个用ngResource定义的工厂:

App.factory('Account', function($resource) {
    return $resource('url', {}, {
        query: { method: 'GET' }
    });
});

我正在对该工厂定义的查询方法进行多次调用。这些调用可以异步发生,但是我需要等待两个调用完成才能继续:

App.controller('AccountsCtrl', function ($scope, Account) {
    $scope.loadAccounts = function () {
        var billingAccounts = Account.query({ type: 'billing' });
        var shippingAccounts = Account.query({ type: 'shipping' });

        // wait for both calls to complete before returning
    };
});

有没有办法用ngResource定义的AngularJS工厂做到这一点,类似于jQuery的$
.when()。then()功能?我不想将jQuery添加到当前项目中。


阅读 185

收藏
2020-07-04

共1个答案

一尘不染

您将要使用promise和$ q.all()

基本上,您可以使用它包装所有$ resource或$ http调用,因为它们返回了promise。

function doQuery(type) {
   var d = $q.defer();
   var result = Account.query({ type: type }, function() {
        d.resolve(result);
   });
   return d.promise;
}

$q.all([
   doQuery('billing'),
   doQuery('shipping')
]).then(function(data) {
   var billingAccounts = data[0];
   var shippingAccounts = data[1];

   //TODO: something...
});
2020-07-04