我在$q.all
无法解析AngularJS时遇到困难。我可能没有正确描述事情,但这至少是这种情况。
服务
app.factory('myService', function($http){
return {
get: function () {
return $http.get('http://localhost:8001/');
}
};
});
在控制器
中angular.forEach(array, function(item){
promises.push({foo:myService.get(), bar: item});
});
$q.all(promises).then(function(results){
$log.info(results);
$scope.results = results;
});
在视图中,从bar
获取值的任何内容都会正确显示。但是,从foo
获取其值的任何内容都是空白的。在控制台中bar
是一个可检查的对象,正如您所期望的那样。但是foo
仍然是一个承诺。它具有承诺的所有方法,但没有相关的数据。
因此,不知何故,$ q.all在结果应用于$scope
时未得到解决。为什么,我不确定。
我会注意到,我已基于以下内容完成了基于此处的内容:angular.forEach and objects
答案 0 :(得分:4)
$q.all期待一系列承诺。尝试这样的事情:
angular.forEach(array, function(item){
var foo = myService.get();
var bar = myOtherService.get();
promises.push(foo);
promises.push(bar);
});
$q.all(promises).then(function(results){
$log.info(foo);
$log.info(bar);
});
<强>更新强>
如果你需要,你可以嵌套多个$ q.all
angular.forEach(array, function(item){
var deferred = $q.defer();
$q.all([myService.get(), myOtherService.get()]).then(function(results){
deferred.resolve({foo:results[0], bar: results[1]});
});
promises.push(deferred.promise);
});
$q.all(promises).then(function(results){
$log.info(results);
});
答案 1 :(得分:0)
var promises = {};
angular.forEach(array, function(item){
promises[item.foo] = item.promise;
});
$q.all(promises).then(...