Как выполнить что-то после завершения всех обратных вызовов в JavaScript - PullRequest
1 голос
/ 06 февраля 2012

Я использую карту Google 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, чтобы все функции обратного вызова завершились?

1 Ответ

1 голос
/ 06 февраля 2012

Если вы знаете количество обратных вызовов, вы можете вызывать какую-то другую функцию в вашем обратном вызове, в которой вы увеличиваете счетчик, и когда счетчик совпадает с количеством обратных вызовов, вы выполняете код.

Что-то вроде:

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

По крайней мере, так я решил один раз. Не знаю лучших решений. Возможно, вместо вызова другой функции вы можете запустить событие. Но это почти то же самое ...

Кстати, я нашел несколько тем на эту тему:

Лучшее решение для ожидания всех обратных вызовов ajax

javascript: выполнить набор асинхронных методов с одним обратным вызовом

...