Google геокодирует несколько адресов в цикле с помощью javascript, как мне узнать, когда все будет сделано?

У меня есть форма, которая запрашивает список местоположений (не много, обычно всего 3 или 4, но это номер динамический). Когда форма отправлена, мне нужно проанализировать данные, использовать геокодирование Google, чтобы получить местоположения, а затем провести линию, соединяющую точки по порядку. У меня работает синтаксический анализ, но я застрял на части геокодирования, в основном из-за его асинхронного характера. Предположим, мои адресные строки хранятся в массиве «адресов», вот как далеко я продвинулся:

function someFunction(addresses) {
  var coords = [];
  for(var i = 0; i < addresses.length; i++) {
    currAddress = addresses[i];
    var geocoder = new google.maps.Geocoder();
    if (geocoder) {
      geocoder.geocode({'address':currAddress}, function (results, status)
        if (status == google.maps.GeocoderStatus.OK) {
          coords.push(results[0].geometry.location);
        } 
        else {
          throw('No results found: ' + status);
        }
      });
    }
  }
  // Initially I tried to work with the data here, but it wasn't all present yet.
}

Рисовать линию достаточно просто, я делал это раньше, когда пользователи указывали географические координаты широты и долготы.Моя проблема в том, что поскольку координаты добавляются только в обратном вызове, как мне узнать, когда это будет сделано? Я не могу просто выгрузить это в функцию и добавить обратный вызов, потому что мне нужно подождать, пока все координаты не будут обработаны.

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

NB: Я взломал этот код вручную, поэтому могут быть опечатки. Мой реальный код до сих пор «работает», я просто не знаю, кому перейти от того, что я должен делать, чтобы что-то делать после того, как все адреса будут обработаны. Кроме того, это в настоящее время разрабатывается как внутреннее приложение для тестирования. После завершения тестирования он будет полностью соответствовать TOS Google. Это означает, что у меня нет страницы, на которую я могу ссылаться. Все приложение также содержит более 2000 строк кода и на данный момент содержит некоторую частную информацию компании, которая в конечном итоге будет прекращена, поэтому вставка всего этого или отправка невозможна. Надеюсь, это не представляет большой проблемы.

13
задан Cœur 3 September 2017 в 11:34
поделиться