Ich versuche, eine Methode zu erstellen, die ein Array von Objekten zurückgibt, nachdem die Objekte von einer API abgerufen wurden. Das Problem ist, dass die Rückkehr von der Fabrik geschieht, bevor alle Anrufe beendet sind. Ich habe versucht, $ q.defer zu verwenden, aber es sendet immer noch die Rückkehr, bevor es fertig ist zu versenden. Das ist, was ich bisher gefunden habe.Rückstellung der Fabrik zurückstellen, bis die Schleife vollständig beendet ist angularjs
angular.module('watchList').factory('storageService', ['$http', '$q', function ($http, $q) {
storage = {};
storage.getMovies = function() {
var movies = localStorage.getItem('movies');
var movieArray = angular.fromJson(movies);
var newArray = [];
var defer = $q.defer();
angular.forEach(movieArray, function (id) {
newArray.push($http.get(api + id));
});
$q.all(newArray).then(function (response) {
defer.resolve(response);
});
return defer.promise;
}
Dies ist der Controller, ich versuche, den Anruf von
angular.module('watchList').controller('watchListController', ['$scope', 'storageService', function ($scope, storageService) {
$scope.movies = storageService.getMovies();
ich die Schleife alles fertig machen wollen, bevor sie die Array zurückgibt.
Werfen Sie einen Blick hier. Es wird Ihnen helfen http://stackoverflow.com/questions/18983138/callback-after-all-asynchronous-foreach-callbacks-are-completed –
Setzen Sie Ihre Rückkehr in eine Funktion und rufen Sie das von Ihrem API-Rückruf. Auf diese Weise werden Sie nichts zurückgeben, bis der Anruf beendet ist. – PersyJack