我正在使用Google放置API並嘗試獲取placeTable的值。當我試圖在最後更新變量是空的。僅當循環內完成異步調用時才輸出
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>";
}
}
}
更新: 與所有的輸入我能調整我的代碼和計數的響應。
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>";
}
}
}
}
}
}
將所有的'placeTable'代碼回調的內部。如果你需要多個請求,那麼在你的回調中保存所有的placeTable調用,並且一旦你達到了發送請求的數量(並且得到相同數量的響應),你可以寫所有的東西。您不能指望異步調用使用非異步代碼。 – h2ooooooo