我有一个单独的工厂用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到我当前的项目。
你会想使用promises和
$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... });