0

У меня есть следующий асинхронный метод геокодирования ниже, он работает как ожидалось, принимая адрес из настраиваемого массива объектов, у меня есть, моя проблема заключается в отображении результата обратно на объект [i], который уволил этот метод, посмотрите результаты, только верните отформатированный адрес, который отличается от того, который я ввел, «Google добавляет некоторые коды областей, изменения на улицу и т. д.» поэтому, когда я получаю эти результаты, у меня нет возможности сопоставить новые координаты Lat и Lng, которые я получил для каждого объекта из-за асинхронного характера этого метода, и результаты не возвращаются в порядке. Любая идея заключается в том, что я могу здесь сделать?Google geocoder.geocode, асинхронное сопоставление переменных

Спасибо.

Редактировать: мои мысли будут создавать способ вернуть результаты в порядок, изменить это на синхронный, не идеально, я знаю, и я не могу найти никаких примеров.

функция iterateAndAddress (objArray) {

for(var i=0; i< objArray.length; i++) { 

     var address = objArray[i].BillingStreet +' '+objArray[i].BillingCity+' '+objArray[i].BillingCountry; 
     var geocoder = new google.maps.Geocoder(); 
     console.log('Address = '+address); 

     if(geocoder) { 
      geocoder.geocode({ 'address': address}, function(results, status) { 

       if (status == google.maps.GeocoderStatus.OK) { 

        //console.log(results); 
        var lat = results[0].geometry.location.lat(); 
        var lon = results[0].geometry.location.lng(); 
        console.log('Address : '+results[0].formatted_address); 


       }else if(status == 'OVER_QUERY_LIMIT') { 

       } 
       else{ 

       } 
      }); 
     } 

    } 
} 
+0

Возможный дубликат [Сохранение результатов геокодирования массиву - Проблема закрытия] (http://stackoverflow.com/questions/13067403/saving-geocoder-results-to-an-array-closure-trouble) – geocodezip

ответ

0

Бросок идентификатор в смеси. Также возвращаем данные, также возвращаем идентификатор, и привязка информации выполняется и очищается.

... редактировать

Итак, вы делаете запросы из массива объектов. Имеет ли этот массив ключи ключа? Если это так, то, как и возвращение lat и long, также возвращают id.

var id = objArray[i].id 
var lat = results[0].geometry.location.lat(); 
var lon = results[0].geometry.location.lng(); 

Или любые ключи, которые вы используете.

Было бы лучше, чтобы вернуть массив (или объект, такие как)

result[i].lat = results[0].geometry.location.lat(); 
result[i].lon = results[0].geometry.location.lng(); 

Пока вы знаете аписываешь я связь с то у вас есть точка сравнения.

Должен признаться, мне не хватает асинхронности (слова?) Вашего текущего метода.

+0

Спасибо Рейф, можете ли вы подробно рассказать о том, как вставить идентификатор? Благодарю. – user524156

+0

Я обновил, но мне может быть что-то не хватает:/ – Rafe

+1

Спасибо за попытку Rafe Я подошел к этому аналогично, прежде чем был относительно новым для JS асинхронных методов, если вы использовали [i] в ​​этом примере 1), вероятно, всегда будет длина массива, если она была небольшой, это связано с тем, что четыре цикла срабатывают. Несколько методов geocoder.geocode являются асинхронными и к тому времени, когда ответ вернется из строя, infact [i] будет увеличен до objArray.length;), This это не моя проблема, хотя моя проблема - это совпадение после завершения всего геокодирования, это не действует как обычный синхронный метод. – user524156

 Смежные вопросы

  • Нет связанных вопросов^_^