Tengo una sola fábrica definida con ngResource:
App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }
});
});
Estoy haciendo varias llamadas al método de consulta definido en esta fábrica. Las llamadas pueden ocurrir de forma asincrónica, pero necesito esperar a que se completen ambas llamadas 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
};
});
¿Hay alguna manera de hacer esto con las fábricas de AngularJS definidas con ngResource, similar a la funcionalidad $ .when (). Then () de jQuery? Preferiría no agregar jQuery a mi proyecto actual.
$then
propiedad pero no exponen ningún objeto de promesa. Exponer por$promise
completo estaría en 1.1.4$q
, a la que se vinculó, garantiza que la matriz de resultados está en el mismo orden que la matriz de promesa.Creo que una mejor solución es:
fuente
La solución de Ben Lesh es la mejor pero no está completa. Si necesita manejar condiciones de error, y sí, lo hace, entonces debe usar el
catch
método en la API de promesa de esta manera:Si no define
catch
y todas sus promesas fallan, elthen
método nunca se ejecutará y, por lo tanto, probablemente dejará su interfaz en mal estado.fuente