Ich benutze Google places API und versuche, den Wert von placeTable zu erhalten. Wenn ich versuche, am Ende zu aktualisieren, ist die Variable leer.Ausgabe nur, wenn asynchrone Aufrufe innerhalb der Schleife abgeschlossen sind
var placeTable;
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var request = { placeId: results[i].place_id };
service.getDetails(request, callbacks);
placeTable = "<table>";
function callbacks(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
placeTable += "<tr><td>" + place.name + "</td><td>" + place.vicinity + "</td></tr>";
}
}
container.innerHTML += placeTable + "</table>";
}
}
}
Update: Mit all dem Eingang ich in der Lage war, meinen Code anzupassen und die Antworten zu zählen.
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
var j = 0;
var placeTable = "<table>";
for (var i = 0; i < results.length; i++) {
var request = { placeId: results[i].place_id };
service.getDetails(request, callbacks);
function callbacks(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
j++;
placeTable += "<tr><td>" + place.name + "</td><td>" + place.vicinity + "</td></tr>";
if(results.length === j){
container.innerHTML += placeTable + "</table>";
}
}
}
}
}
}
Platz alle Ihre 'placeTable' Code innerhalb des Callback. Wenn Sie mehrere Einsen benötigen, speichern Sie alle placeTable-Aufrufe in Ihrem Rückruf und sobald Sie die Anzahl der gesendeten Anfragen erreicht haben (und die gleiche Anzahl an Antworten zurückbekommen haben), können Sie alles schreiben. Sie können nicht erwarten, dass Async-Aufrufe mit Nicht-Async-Code arbeiten. – h2ooooooo