【发布时间】:2016-05-04 04:39:28
【问题描述】:
在继续之前,我似乎无法让代码暂停并等待 $http 响应。目前我的代码看起来像这样:
var postAuthorCache = new Array();
angular.forEach($scope.news.posts, function(value, key) {
console.log(JSON.stringify(postAuthorCache)); //Keeps printing "[]"
if (!(value["post_author"] in postAuthorCache)) {
$http.get('/api/tumblr_primaryblog_name/' + value["post_author"]).then(function(response) {
postAuthorCache[value["post_author"]] = response.data;
value["post_author_pblog"] = postAuthorCache[value["post_author"]];
console.log("NOT CACHE: " + value["post_author"]);
});
} else {
value["post_author_pblog"] = postAuthorCache[value["post_author"]];
console.log("IN CACHE: " + value["post_author"]);
};
});
但是当它运行时,console.log 输出不是我所期望的。
[]
[]
[]
[]
[]
[]
[]
NOT CACHE: aaaa
NOT CACHE: bbbb
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: bbbb
我期望的输出是在开始时运行console.log(JSON.stringify(postAuthorCache));,然后在查询$http 之后,它运行console.log("NOT CACHE: " + value["post_author"]); 或console.log("IN CACHE: " + value["post_author"]);。之后,它应该通过再次显示数组对象的字符串化来重复自身,并继续执行NOT CACHE 或IN CACHE 日志语句。
所以问题是,foreach 循环如何等待 $http.get 完成,然后再继续?
【问题讨论】:
-
有多种方法可以实现这一点,但最好了解您将如何实际使用这些值,因为
console.log消息顺序可能不是您想要的使用方式?如果是,您是否可以手动循环遍历数组,而不是使用forEach,并保持当前index的运行计数?并且只在.get回调中继续计数index
标签: javascript angularjs foreach