Mam jedną fabrykę zdefiniowaną w ngResource:
App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }
});
});
Wykonuję wiele wywołań metody zapytania zdefiniowanej w tej fabryce. Wywołania mogą być wykonywane asynchronicznie, ale przed kontynuowaniem muszę poczekać na zakończenie obu wywołań:
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
};
});
Czy istnieje sposób, aby to zrobić z fabrykami AngularJS zdefiniowanymi za pomocą ngResource, podobnie do funkcji $ .when (). Then () z jQuery? Wolałbym nie dodawać jQuery do mojego obecnego projektu.
$then
właściwość, ale nie ujawniają żadnego obiektu obiecującego.$promise
Całkowite ujawnienie nastąpi w wersji 1.1.4$q
, do której utworzono łącze, gwarantuje ona, że tablica wynikowa jest w tej samej kolejności, co tablica obietnicy.Myślę, że lepszym rozwiązaniem jest:
źródło
Rozwiązanie firmy Ben Lesh jest najlepsze, ale nie jest kompletne. Jeśli chcesz poradzić sobie z warunkami błędu - i tak, robisz - musisz użyć
catch
metody w obiecującym interfejsie API w następujący sposób:Jeśli nie zdefiniujesz,
catch
a wszystkie obietnice zawiodą,then
metoda nigdy nie zostanie wykonana, a zatem prawdopodobnie pozostawi twój interfejs w złym stanie.źródło