У меня есть одна фабрика, определенная с помощью 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
};
});
Есть ли способ сделать это с помощью фабрик AngularJS, определенных с помощью ngResource, аналогично функциональности jQuery $ .when (). Then ()? Я бы предпочел не добавлять jQuery в мой текущий проект.
$then
свойство, но не предоставляют никаких объектов обещаний. Разоблачение$promise
полностью будет в 1.1.4$q
, на которую вы ссылаетесь, это гарантирует, что массив результатов находится в том же порядке, что и массив обещаний.Думаю, лучшее решение:
источник
Решение от Бена Леша - лучшее, но не полное. Если вам нужно обработать условия ошибки - и да, вы это делаете - тогда вы должны использовать
catch
метод в API обещаний следующим образом:Если вы не определитесь
catch
и все ваши обещания не будут выполнены, тоthen
метод никогда не будет выполнен и, следовательно, вероятно, оставит ваш интерфейс в плохом состоянии.источник