Ich habe eine einzelne Factory mit ngResource definiert:
App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }
});
});
Ich rufe die in dieser Factory definierte Abfragemethode mehrfach auf. Die Anrufe können asynchron erfolgen, aber ich muss warten, bis beide Anrufe abgeschlossen sind, bevor ich fortfahre:
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
};
});
Gibt es eine Möglichkeit, dies mit AngularJS-Fabriken zu tun, die mit ngResource definiert wurden, ähnlich wie die $ .when (). Then () -Funktionalität von jQuery? Ich würde es vorziehen, meinem aktuellen Projekt kein jQuery hinzuzufügen.
$then
Eigenschaften, legen jedoch kein Versprechungsobjekt offen.$promise
Vollständige Belichtung wäre in 1.1.4$q
, mit der Sie verlinkt haben, garantiert wird, dass das Ergebnisarray in derselben Reihenfolge wie das Versprechungsarray liegt.Ich denke, eine bessere Lösung ist:
quelle
Die Lösung von Ben Lesh ist die beste, aber nicht vollständig. Wenn Sie mit Fehlerbedingungen umgehen müssen - und ja, das tun Sie -, müssen Sie die
catch
Methode für die Versprechen-API wie folgt verwenden:Wenn Sie nicht definieren
catch
und alle Ihre Versprechen fehlschlagen, wird diethen
Methode niemals ausgeführt und Ihre Schnittstelle wird wahrscheinlich in einem schlechten Zustand sein.quelle