Показать сообщение отдельно
  #1 (permalink)  
Старый 01.10.2011, 23:50
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

Проблема с асинхронностью
Столкнулся с проблемой при написании плагина.

(function( $ ){

        var geocoder;
        var markers   = [];
     
        var methods = {
                init : function(options) {                                                    
                          ...                                            
                },
                      
                addMarker: function (marker){
                        
                        if (адрес координатами) {
                                markers.push(marker);
                        }        
                        else{
                                methods._geocoder(marker);   
                        }
                },
                               
                getMarker: function (id){
                        
                        .....
                  
                },               
                      
                _geocoder: function (marker) {
                                               
                        geocoder.geocode( {
                                'address': marker.position
                        }, function(results, status) {
                                if (status == google.maps.GeocoderStatus.OK) {
                                
                                        //вычислили координаты и добавляем маркер
                                        methods.addMarker(marker);

                                } 
                        });                               
                }
        
                       
        };

})( jQuery );



В функции _geocoder, используется геокодер гугла, для вычисления координат метки. Его вызов асинхронен. И возникает такая ситуация, если добавить несколько меток, вызвав метод addMarker, а потом возвратить их функцией getMarker, то получаем пустоту, потому что геокодер не успел отработать и метки не попали в массив markers.

Подскажите, пожалуйста. Как при вызове getMarker, узнать что геокодирование всех меток уже завершилось.

Последний раз редактировалось capscom, 02.10.2011 в 14:47.
Ответить с цитированием