我使用Google Maps API和地理编码器服务,我只是注意到了这一点 索引。
for(var i=0; i<2; i++){
console.log("A_" + i);//0, 1
if (geocoder) {
geocoder.geocode({ 'address': dataObject[i].address}, function(results, status) {
console.log("B_" + i);//1, 2
});
}
}
&#13;
输出:
A_0
B_1
A_1
B_2
dataObject[i].address
具有正确的索引(0,1)。
这里发生了什么?
答案 0 :(得分:-1)
原因是调用geocoder.geocode是异步的,循环继续而不等待响应。
一种可能的解决方案是使用async / await和promises。
var dataObject = ['Sydney', 'NSW'];
function initMap() {
var geocoder = new google.maps.Geocoder();
testFunction(geocoder);
}
function myGeocoder(geocoder, i) {
return new Promise(function(resolve) {
geocoder.geocode({ 'address': dataObject[i].address},
function(results, status) {
resolve(i);
});
})
}
async function testFunction (geocoder) {
for(var i=0; i<2; i++){
console.log("A_" + i);
if (geocoder) {
var result = await myGeocoder(geocoder, i);
console.log("B_" + result);
}
}
}