APIからオブジェクトを取得した後に、オブジェクトの配列を返すメソッドを作成しようとしています。問題は、すべてのコールが終了する前に工場からの戻りが発生することです。私は$ q.deferを使用しようとしましたが、発送準備が整う前に返品を送信します。 これまで私が思いついたのはこれです。ループが完全に終了するまで、ファクトリのリターンを遅らせてください。
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;
}
これは私が、私はそれが配列を返す前に、ループはすべてを終了したい
angular.module('watchList').controller('watchListController', ['$scope', 'storageService', function ($scope, storageService) {
$scope.movies = storageService.getMovies();
から電話をかけるしようとしているコントローラです。
こちらをご覧ください。それはあなたに役立ちますhttp://stackoverflow.com/questions/18983138/callback-after-all-asynchronous-foreach-callbacks-are-completed –
関数にあなたのリターンを入れて、あなたのAPIの成功のコールバックから呼び出す。この方法では、api呼び出しが完了するまで何も返されません。 – PersyJack