ИЗМЕНИТЬ
Первый ответ - изящный, но, как было сказано несколько раз в этом вопросе и еще один вопрос о stackoverflow, проблема в том, что служба и контроллер запускают свое дело до того, как данные действительно поступят.
(Последний комментарий к первому ответу:)
Да, проблема в том, что вызовы API завершаются ПОСЛЕ запуска службы и возвращает все к контроллеру, см. здесь screencast.com/t/uRKMZ1IgGpb7... Что мой вопрос BASE, как я мог подождите на всех частях для получения данных?
Мне нравится, что я повторяю, , как мы делаем службу, которая заполняет массив после успешного поиска данных, а контроллер получает данные после всего этого, потому что, как вы можете см. на моем снимке экрана, все работает в другом порядке.
У меня есть этот код:
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;
В течение жизни я не могу понять, почему мне нужно поставить тайм-аут при передаче результирующего массива для отсрочки?
Не должен ли принцип быть подобным, отсрочка ждет, когда информация придет, а затем вернет обещание? В чем смысл 1 секунды? Из того, что я понимаю, отсрочка должна быть в состоянии ждать столько, сколько потребуется, чтобы API возвращал результат и возвращал обещанные данные.
Я действительно смущен, я ударил головой о стены в течение последних двух часов, потому что я не получал никаких данных в своем контроллере, только когда я помещал туда этот тайм-аут.