0

我正在研究谷歌地图 API。我不知道为什么在 index++ 之后调用下面的函数。据我所知,应该首先调用 ReverseGeocode()。取而代之的是,它首先递增,然后调用给我带来问题的函数。警告框在编写时显示,但在函数的最后一行执行后调用中间函数,即 (index++)。

      function placeMarker(location)
      {
          alert("iiii");
          ReverseGeocode(location.lat(),location.lng());
          alert("jjjk");
          index++;
      }

这是我的 ReverseGeoCode

  function ReverseGeocode(lat,lng) {     
     var latlng = new google.maps.LatLng(lat, lng);
     geocoder.geocode({'latLng': latlng}, function(results, status)
  {
      if (status == google.maps.GeocoderStatus.OK) 
     {
           if (results[1])
      {

          places[index]=results[0].formatted_address;
          alert(places[index]+"index="+index);
          AddRow('table',results[0].formatted_address);
          document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
      }
  }
  else 
  {
    alert("Geocoder failed due to: " + status);
      }
    });
  }

请解释。提前致谢。

4

2 回答 2

1

警报在您的回调函数中,它将在geocoder.geocode完成计算时执行。

geocoder.geocode似乎是异步的。通常,这意味着geocoder.geocode它会在其他地方开始缓慢地工作,而您的程序会继续在本地结束。稍后完成时geocoder.geocode,它将执行您提供的回调函数。

于 2012-04-22T10:42:34.723 回答
0

我认为这geocoder.geocode是异步的。稍后,当 的值index增加时,它会执行您的匿名函数。

function placeMarker(location)
 {
 alert("iiii")
 ReverseGeocode(location.lat(),location.lng(),index);
 alert("jjjk");
 index++;

    }

 

function ReverseGeocode(lat,lng,index) {     
     var latlng = new google.maps.LatLng(lat, lng);
     geocoder.geocode({'latLng': latlng}, function(results, status)
  {
      if (status == google.maps.GeocoderStatus.OK) 
     {
           if (results[1])
      {

          places[index]=results[0].formatted_address;
          alert(places[index]+"index="+index);
          AddRow('table',results[0].formatted_address);
          document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
      }
  }
  else 
  {
    alert("Geocoder failed due to: " + status);
      }
    });
  }

在这种情况下,index进入匿名函数的本地范围,因此不会被覆盖。

于 2012-04-22T10:49:17.153 回答