Eu tenho uma única fábrica definida com ngResource:
App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }
});
});
Estou fazendo várias chamadas para o método de consulta definido nesta fábrica. As chamadas podem acontecer de forma assíncrona, mas preciso aguardar a conclusão das duas chamadas antes de continuar:
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
};
});
Existe uma maneira de fazer isso com as fábricas AngularJS definidas com ngResource, semelhante à funcionalidade $ .when (). Then () do jQuery? Eu preferiria não adicionar jQuery ao meu projeto atual.
$then
propriedade, mas não expõem nenhum objeto de promessa. A exposição$promise
completa seria em 1.1.4$q
, à qual você vinculou, isso garante que a matriz de resultado está na mesma ordem que a matriz de promessa.Acho que a melhor solução é:
fonte
A solução de Ben Lesh é a melhor, mas não é completa. Se você precisar lidar com condições de erro - e, sim, você precisa - então você deve usar o
catch
método na API de promessa como este:Se você não definir
catch
e todas as suas promessas falharem, othen
método nunca será executado e, portanto, provavelmente deixará sua interface em um estado ruim.fonte