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