編集
最初の答えは洗練されたものですが、この質問とstackoverflowに関する別の質問で何度か述べたように、問題は、データが実際に到着する前にサービスとコントローラーが実行することです。
(最初の回答に対する最後のコメント:)
はい、問題は、サービスが実行されてすべてがコントローラーに返された後に API 呼び出しが終了することです。到着?
繰り返し言っているように、データの取得が成功した後に配列にデータを入力するサービスを作成する方法と、これがすべて発生した後にデータを取得するコントローラーを作成するにはどうすればよいですか。注文。
私はこのコードを持っています:
var deferred = $q.defer();
$http.get('../wordpress/api/core/get_category_posts/?category_id=14 ').success(function(data) {
//we're emptying the array on every call
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=15 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=16 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=17 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
//deferred.resolve(aggregatedData);
$timeout(function() {
deferred.resolve(aggregatedData);
}, 1000);
/*//deferred.reject('There is a connection problem.');
if (myservice._initialized) {
$rootScope.$broadcast('postsList', deferred.promise);
}*/
//myservice._initialized = true;
myservice = deferred.promise;
return deferred.promise;
私の人生では、結果の配列を defer に渡すときになぜタイムアウトを設定する必要があるのか 理解できませんか?
情報が来るのを待ってから約束を返すという原則はありませんか?その1秒のポイントは何ですか?私が理解していることから、延期は、APIが結果を返し、約束されたデータを返すのに必要な限り待つことができるはずです。
私は本当に混乱しています.タイムアウトを設定したときだけ、コントローラーでデータを受信していなかったため、過去2時間壁に頭をぶつけました.