我正在使用谷歌地图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
以便所有回调函数都已完成?
答案 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;
}
}