使用google map api时,javascript无法添加到数组中

时间:2018-01-05 04:26:12

标签: javascript google-maps

enter image description here

我试图将纬度和经度推入co(数组),但是当我显示co的长度时,它在底部,它是0.

如果我将co.push(latitude,longitude)替换为alert(latitude),则可以正常使用。

1 个答案:

答案 0 :(得分:0)

首先,

我不确定你是否真的想推送像这样的值

co.push(latitude,longitude)

这将结束这样的事情。

[latitude,longitude,latitude,longitude,latitude,longitude]  

相反,您可以制作一个对象并像

一样推送它们
[{lat:"",lan:""},{lat:"",lan:""},{lat:"",lan:""}]

其次,geocoder.geocode方法异步工作
因此,当您的警报功能被调用时,您的地理编码尚未可用 这就是为什么它显示长度0

有很多方法可以解决问题,回调,承诺,生成器和async / await

我将使用promise在此处重新编写代码

function getCode() {

let geocoder = new google.maps.Geocoder();
let promises = [];

for(let i=0,arr=["melbounre","south bank","kew"];i<3;i++){
 promises.push(resolveGeocode(geocoder,arr[i]));
}

 Promise.all(promises).then(function(values){

  // array of geocodes available here

  alert(values[0].lat);
  alert(values[0].lng);

  alert(values[1].lat);
  alert(values[1].lng);

  alert(values[2].lat);
  alert(values[2].lng);
 })  

};

function resolveGeocode(geocoder,address){
return new Promise(function(resolve,reject){
  geocoder.geocode( {'address':address}, function( results, status ) {
      if(status == google.maps.GeocoderStatus.OK){
         resolve({
          lat:results[0].geometry.location.lat(),
          lng:results[0].geometry.location.lng()
         });
      }  

  });
})
}

getCode();