【发布时间】:2013-09-11 12:07:27
【问题描述】:
编辑
第一个答案是优雅的,但是,正如在这个问题和关于 stackoverflow 的另一个问题中多次指出的那样,问题是服务和控制器在数据实际到达之前运行它们的东西。
(对第一个答案的最后评论:)
是的,问题是 API 调用在服务运行后完成 并将所有内容返回给控制器,请参见此处 screencast.com/t/uRKMZ1IgGpb7 ...这是我的基本问题,我怎么能 等待所有部分的数据到达?
就像我重复说的那样,我们如何在成功检索数据后创建一个填充数组的服务,以及在所有这些发生后控制器获取数据,因为你可以在我的屏幕截图中看到,事情以不同的顺序运行。
我有这个代码:
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 时必须设置超时?
原理不应该是这样,defer等待信息到来然后返回promise吗?那1秒有什么意义?据我了解,defer 应该能够等待 API 返回结果并返回承诺的数据。
我真的很困惑,在过去的两个小时里我一直把头撞在墙上,因为我没有在控制器中接收任何数据,只有当我在那里设置超时时。
【问题讨论】:
-
您的意思是要将所有
$http.get返回值放入$q.all吗? -
我将所有输出的数组都放入聚合数据中,这样我就可以将该对象传递给 $q defer。我想了解实际发生了什么,这是一个 jsFiddle,jsfiddle.net/tjnWQ .... 承诺在这里如何运作。
-
说实话,我充满了挫败感。现在已经快 6 周了妨碍制作实际可用产品的框架:)。我屈服了,在这本书上花了很多钱packtpub.com/angularjs-web-application-development/book
-
"第一个答案是优雅的,"...问题是什么?
-
当时,我无法在 Angular 中掌握和使用 Promise 的概念,我在互联网上发现了一些误导性的文章,其中有人实际上使用了 $timeout [somehow] 并连接了多个承诺的回归,长话短说,我脑子里的想法一团糟,下面的答案中的@dluz让一切都清楚了。
标签: javascript angularjs promise q