移動する前に一時停止して$ 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"]);
のいずれかを実行します。その後、配列オブジェクトのstringifyを再度表示して、それ自身を繰り返す必要があります。NOT CACHE
またはIN CACHE
ログステートメントを実行してください。
それでは、移動する前に、$ http.getが完了するのをforeachループがどのように待つのでしょうか?
これを達成するための複数の方法がありますが、実際にどのように値を使用するのかを理解するためには、 'console.log'メッセージの順序は使い方が似ていない可能性が高いからです。そうであれば、 'forEach'を使う代わりに手動で配列をループして、現在の' index'の実行カウントを保つことができますか?そして、 '.get'コールバックで' index'を数え続けるだけです – Akurn
[Possible inside angular.foreachを実装する可能性のある方法はありますか?](http://stackoverflow.com/questions/36997004/is-there-a -possible-way-implemented-promise-inside-angular-foreach) – Maverick