在javascript中完成所有回调后,如何执行某些操作

时间:2012-02-06 06:57:37

标签: javascript google-maps google-maps-markers

我正在使用谷歌地图v3进行一些地址转换。 我将请求和回调函数传递给 Geocoder.geocode 。回调函数将在地图上添加标记。毕竟,我使用map.FitBounds(fullBounds)让所有制作者都能看到,其中map地图对象,fullBounds LatLngBounds 对象

下面的

是我的代码:

    for(i = 0; i < requestArray.length; i ++)
    {
        geo.geocode(requestArray[i], calbck);
    }

我的问题是,当我在map.fitBounds(fullBounds)中调用calbck时,并非所有回调函数都已完成(在我的观察中始终没有)。那么如何延迟fitBounds以便所有回调函数都已完成?

2 个答案:

答案 0 :(得分:1)

如果您知道回调的数量,您可以在回调中调用其他函数来增加计数器,并且当计数器与回调数量相同时执行代码。

类似的东西:

function myFunctionToExecuteAfterCallbacks()
{
  numCallbacks++;
  if(numCallbacks == numAllCallbacks)
  {
    // Code to execute here...
  }
}

至少我是如何解决它的。不知道有什么更好的解决方案。 也许不是调用另一个函数,而是可以触发事件。但它几乎一样......

顺便说一句,我在这方面找到了一些话题:

Best solution to wait for all ajax callbacks to be executed

javascript: execute a bunch of asynchronous method with one callback

答案 1 :(得分:0)

如果您使用 Promise,请查看 Promise.all()

您也可以进行递归回调。

doStuff() {
  if (requestArray.length) {
    geo.geocode(requestArray.pop(), this.doStuff)
  } else {
    // we're done;
  }
}