JS混淆了谷歌地理编码的循环索引

时间:2018-03-28 11:14:31

标签: javascript google-maps loops google-geocoder

我使用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;
&#13;
&#13;

输出:
A_0
B_1
A_1
B_2

dataObject[i].address具有正确的索引(0,1)。 这里发生了什么?

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);
    }
  }
}