Ich kann nicht scheinen, den Code zu haben, um anzuhalten und auf die $ HTTP Antwort zu warten, bevor ich weitergehe. Derzeit ist mein Code sieht etwa so aus:
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"]);
};
});
Aber wenn es lief, der console.log Ausgang ist nicht das, was ich erwartet hatte.
[]
[]
[]
[]
[]
[]
[]
NOT CACHE: aaaa
NOT CACHE: bbbb
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: aaaa
NOT CACHE: bbbb
Die Ausgabe, die ich erwartet hatte, um die console.log(JSON.stringify(postAuthorCache));
mit am Anfang laufen, dann nach $ http abfragt, läuft es entweder console.log("NOT CACHE: " + value["post_author"]);
oder console.log("IN CACHE: " + value["post_author"]);
. Danach sollte es sich wiederholen, indem das stringify für das Array-Objekt erneut angezeigt wird und mit den Protokollanweisungen NOT CACHE
oder IN CACHE
fortgefahren wird.
Also die Frage ist, wie würde die Foreach-Schleife warten auf $ http.get zu vervollständigen, bevor Sie weiter?
Mehrere Möglichkeiten, um dies zu erreichen, aber besser zu verstehen, wie Sie die Werte tatsächlich verwenden werden, da 'console.log' Nachrichtenreihenfolge ist wahrscheinlich nicht, wie Sie es verwenden möchten? Wenn dies der Fall ist, könnten Sie das Array manuell durchlaufen, anstatt "forEach" zu verwenden und nur eine laufende Zählung des aktuellen "Index" zu behalten? Und gehen Sie nur weiter, indem Sie 'index' im '.get' Callback zählen. – Akurn
Mögliches Duplikat von [Gibt es eine Möglichkeit, Promise in angular.foreach zu implementieren?] (Http://stackoverflow.com/questions/36997004/is-there-a -möglich-Weise-Implementierung-Versprechen-in-Winkel-foreach) – Maverick