Javascript 数组在填充时显示 0 长度

标签 javascript arrays loops

我确信这真的很简单,但我没有太多运气找出问题所在。我正在创建一个空数组(位置),用 getPartnerLocations 函数中的位置对象填充它,然后尝试使用 drop 函数在 map 上绘制位置。我遇到的问题是,在 drop 函数内部,其中包含内容的位置数组返回的长度为零,因此其中的循环不起作用。任何关于这里发生的事情的提示或想法将不胜感激。

var markers = [];
var locations = [];
var iterator = 0;
var map;
var geocoder;
var newYork = new google.maps.LatLng(40.7143528, -74.0059731);


  function initialize() {
    var mapOptions = {
      zoom: 12,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: newYork
    };

    map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);

  }

  function getPartnerLocations() {
      geocoder = new google.maps.Geocoder();    
      $('.partner').each(function(index){

            var street  = $('.partner-streetaddress',this).text();
            var city    = $('.partner-city',this).text();
            var state   = $('.partner-state',this).text();
            var country = $('.partner-country',this).text();

            var address = street + ', ' + city  + ', ' + state + ', ' + country;

            geocoder.geocode( { 'address': address}, function(results, status) 
            {

                if (status == google.maps.GeocoderStatus.OK) 
                {
                    locations.push( results[0].geometry.location ); 
                    console.log(locations[index]);
                }
                else
                {
                    console.log('failed to geocode address: ' + address);   
                }
            });

      });
      initialize();
      drop();
  }

  function addMarker() {
    console.log('add marker function');
    markers.push(new google.maps.Marker({
      position: locations[iterator],
      map: map,
      draggable: false,
      animation: google.maps.Animation.DROP
    }));
    iterator++;
  }

  function drop() 
  {
    console.log(locations.length);
    for (var i = 0; i < locations.length; i++) {
      setTimeout(function() {
        addMarker();
      }, i * 200);
    }
  }

 getPartnerLocations(); 

最佳答案

geocode 是一个异步函数。

直到您调用drop之后一段时间后,回调才会执行。
因此,当您调用drop时,数组仍然是空的。

您需要在最后一次 AJAX 调用回复后在 geocode 回调中调用 initializedrop

关于Javascript 数组在填充时显示 0 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423660/

相关文章:

javascript - AIR HTMLLoader window.open 不起作用

php - 让 SQL 从嵌套数组中选择

forEach 内的 Javascript 回调

javascript - Node js 调试在 Visual Studio 代码中不起作用(2020 年)

javascript - 如何使用 Javascript 下载、压缩和保存多个文件并取得进展?

python - 为什么 Numpy 有维度 (n,) 而不是 (n,1) 只有

javascript - 如何从 JavaScript 中的数组返回对象

python - 如何重写递归函数以使用循环代替?

javascript - 显示模块模式 (RMP) 的缺点

javascript - 如何比较两条不同路径的点(点数组)