Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2011, 00:36
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

у функции геокодирования должны быть функция обратного вызова (callback), которая и вернет результат
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2011, 00:44
Интересующийся
Отправить личное сообщение для capscom Посмотреть профиль Найти все сообщения от capscom
 
Регистрация: 28.08.2011
Сообщений: 28

walik, результат чего? callback используется, вот же он:

function(results, status) {
           if (status == google.maps.GeocoderStatus.OK) {
                   methods.addMarker(marker);
	   }         
}

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47