26.05.2017 07:39
OlegON
 
Никак не могу понять, почему alert всегда выдает undefined?
Растыкал дебаг - return возвращает, что надо, но работает ПОСЛЕ alert. Т.е. управление передается в функцию и код продолжает работать дальше. Вопрос, почему? И как этого избежать?

Код:
function successFunction(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    alert(codeLatLng(lat, lng));
}
Код:
function codeLatLng(lat, lng) {
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        console.log(results);
        if (results[1]) {
            for (var i=0; i<results[0].address_components.length; i++) {
                for (var b=0;b<results[0].address_components[i].types.length;b++) {
                    if (results[0].address_components[i].types[b] == "administrative_area_level_2") {
                        city= results[0].address_components[i];
                        break;
                    }
                }
            }
         return city.long_name;
        } else {
          return "0";
        }
      } else {
        console.log("Geocoder failed due to: " + status);
        return "1";
      }
    });
}
30.05.2017 19:58
twix
 
geocode - асинхронный метод. Он делает AJAX-запрос на сервер, не останавливая выполнение прочего кода. Подобные вещи должны строиться на callback'ах.
Т.е., алёрт твой надо сунуть в коллбэк метод, передаваемый вторым атрибутом методу geocode вместо жирного ретурна.
30.05.2017 22:06
OlegON
 
Да, спасибо, уже разобрался, только пока не очень понятно, как ловить асинхронные функции...
30.05.2017 22:23
twix
 
Цитата:
OlegON Да, спасибо, уже разобрался, только пока не очень понятно, как ловить асинхронные функции...
Читать документацию от разработчиков. (8
Вообще, несмотря на то, что ивенты и асинхронность - столпы джаваскрипт, они добавляют очень много геморроя при отладке.
31.05.2017 06:38
EugeneT
 
Цитата:
OlegON только пока не очень понятно, как ловить асинхронные функции...
слушать события или писать лапшу из колбеков.
События, имхо, правильнее и красивее.
31.05.2017 06:51
OlegON
 
Цитата:
EugeneT слушать события или писать лапшу из колбеков
Я в том смысле, который twix понял :)
Код написанной выше процедурки не мой. О том, что он асинхронный, можно было только догадаться.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.