如何控制for循环中的每个语句何时执行

时间:2017-09-21 08:54:22

标签: javascript google-maps google-maps-api-3 promise setinterval

我正在使用谷歌地图api v3,同时进行地理编码和地理编码反向。

我做的第一件事是构建一个包含所有标记的数组,然后循环遍历标记,以便为它们添加地址(反向地理编码)。我是通过承诺来做到这一点的。我希望我的数组在任何给定时间拥有的最大元素数是20。 我只能看到大约5个标记点获得正确的地址,因为我收到了OVER_QUERY_LIMIT状态代码。

现在我想实现一个解决方案,它只会尝试在每个固定的时间间隔内查询地理编码服务,例如每2秒一次。 我尝试过以下但是它没有用,我希望有人可以给我一些关于如何实现我刚才解释的可能解决方案的指示。



for (var i = 0; i < markers.length; i++) {
  var intervalID = window.setInterval(addPromiseDataToMarkerDetailsAndAddMarker(markers[i]), 2000);

}

function addPromiseDataToMarkerDetailsAndAddMarker(marker) {
  var returnedValue;
  asyncGeoCode(marker)
    .then(
      function(returnedValue) {
        id_address_map.set(returnedValue.CallID, returnedValue);
        addMarker(returnedValue);
        loadTimeline(returnedValue);
      },

      function(err) {
        addMarker(returnedValue);
      }
    )
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

看起来你有一个&#39;关闭&#39;问题。用以下代码替换你的for循环:

for (var i = 0; i < markers.length; i++) {
  var intervalID = timer(i);
}
function timer(j)
{
  return window.setInterval(addPromiseDataToMarkerDetailsAndAddMarker(markers[j]), 2000);
}

答案 1 :(得分:0)

对代码的最简单更改如下:

var slowlyAddMarker(index) {
    addPromiseDataToMarkerDetailsAndAddMarker(markers[index]);
    index++;
    if (index < markers.length) {
        setTimeout(slowlyAddMarker, 2000, index);
    }
}
slowlyAddMarker(0);

该函数将使用下一个索引每2秒调用一次,直到所有标记都已完成