Задать вопрос
@magary4

Геокодинг массива адресов?

получаю массив адресов, нужно каждый геокодировать-получить координаты и добавить в новый массив уже с координатами
пахнет callbackhellom
как сделать

for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    GMaps.geocode({
                        address: item.address+" "+item.city+" "+item.zip,
                        callback: function(results, status) {
                            if (status == 'OK') {
                                var latlng = results[0].geometry.location;
                                map.setCenter(latlng.lat(), latlng.lng());

                                markers_data.push({
                                    id: item.id,
                                    lat : latlng.lat(),
                                    lng : latlng.lng(),
                                    title : item.name,
                                    icon : {
                                        size : new google.maps.Size(32, 32),
                                        url : icon
                                    },
                                    infoWindow: {
                                        content : ''
                                    }
                                });
                            }
                        }
                    });


после того как все будут геокодированы - нужно вызвать общий колбэк и добавить на карту все маркеры одним вызовом

кроме того у меня внутри колбэка GMaps.geocode callback недоступен обьек item

помогите
  • Вопрос задан
  • 343 просмотра
Подписаться 1 Оценить Комментировать
Решение пользователя Владимир Сергеевич К ответам на вопрос (2)
VladimirZhid
@VladimirZhid
Нравится делать что-то интересное и полезное.
Если нет желания тащить async, то можно как-то так:
var pro = new Promise(function(resolve, reject){
    //...your code
    callback: function(results, status) {
        if (status == 'OK') {
            // тест на кол-во записей в markers_data или на последнюю итерацию цикла
            //если так то resolve(markers_data)
        }
    }
    //...
}).then(function(markers_data){
    //...
})

Если нет желания использовать промисы то callbackhell велком!
А item должен быть виден...

Ну можно еще событие кидать. Использовать какой-нибудь EventEmitter, ну или на window...
Ответ написан