J'ai une seule usine définie avec ngResource:
App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }
});
});
Je fais plusieurs appels à la méthode de requête définie sur cette usine. Les appels peuvent se produire de manière asynchrone, mais je dois attendre la fin des deux appels avant de continuer:
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-t-il un moyen de faire cela avec les usines AngularJS définies avec ngResource, similaire à la fonctionnalité $ .when (). Then () de jQuery? Je préférerais ne pas ajouter jQuery à mon projet actuel.
$then
propriétés mais n'exposent aucun objet de promesse. Exposer$promise
complètement serait en 1.1.4$q
, à laquelle vous avez lié, cela garantit que le tableau de résultats est dans le même ordre que le tableau de promesse.Je pense qu'une meilleure solution est:
la source
La solution de Ben Lesh est la meilleure mais elle n'est pas complète. Si vous devez gérer des conditions d'erreur - et, oui, vous le faites - alors vous devez utiliser la
catch
méthode sur l'API de promesse comme ceci:Si vous ne définissez pas
catch
et que toutes vos promesses échouent, lathen
méthode ne s'exécutera jamais et laissera donc probablement votre interface dans un mauvais état.la source