我正在使用Google Places 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>";
}
}
}
}
}
}
答案 0 :(得分:3)
callbacks
可能会在将来的某个时间被调用。所以你的行:
container.innerHTML += placeTable + "</table>";
在调用callbacks
函数之前执行。
更新:重构代码:
function callback(results, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
return;
}
var placeTable = "<table>";
var detailsDone = 0;
function callbacks(place, status) {
detailsDone += 1;
if (status == google.maps.places.PlacesServiceStatus.OK) {
placeTable += "<tr><td>" + place.name + "</td><td>" + place.vicinity + "</td></tr>";
}
if (detailsDone >= results.length) {
container.innerHTML += placeTable + "</table>";
}
}
for (var i = 0; i < results.length; i++) {
service.getDetails({
placeId: results[i].place_id
}, callbacks);
}
}