Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   return из подфунукции (https://javascript.ru/forum/misc/26433-return-iz-podfunukcii.html)

blax 08.03.2012 12:18

return из подфунукции
 
Есть функция:
function getState(zipcode) {
    var state = "N/A";
    state = geocoder.geocode( { 'address': zipcode}, function (result, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            state = result[0]['address_components'][component]['short_name'];
                [B]return state;[/B]
        }
    });
}

Тут он, как я понимаю, возвращает в подфункцию
function (result, status) {}


Как мне вернуть state в главной функции?
Так не работает
function getState(zipcode) {
    var state = "N/A";
    state = geocoder.geocode( { 'address': zipcode}, function (result, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            state = result[0]['address_components'][component]['short_name'];
        }
    });
    [B]return state;[/B]
}

Gvozd 08.03.2012 12:22

Цитата:

Сообщение от blax
Так не работает

Естественно, ведь во втором примере вы делаете return ДО того, как выполнилась function (result, status) , и на этот момент state еще не был получен с сервера.
Зато вы его прекрасно затерли возвратом функции geocoder.geocode, так как решили использовать такое же имя переменной

blax 08.03.2012 15:43

Да, эту ошибку уже понял. Спасибо. Но КАК мне вернуть ПОСЛЕ того, как выполниться функция?

blax 08.03.2012 16:32

Или вот, еще одна такая же трбла:
var postal_code = "";
    getLatLng(city1, function(addr){
        codeLatLng(addr, function(ZIP){
            postal_code = ZIP;
        });
    });
    alert (postal_code);


Как алерт выполнить после функций?
Алерт это просто пример, мне надо дальше работать с переменной postal_code.

Gvozd 08.03.2012 23:40

blax,
Привыкайте к асинхронному стилю программирования
Если вы хотите работать с переменной вычисляемой в результате выполнений асинхронной функции, то код работающий с ней должен вызыватся колбеке, либо позже
var postal_code = "", work_with_postal_code;
    getLatLng(city1, function(addr){
        codeLatLng(addr, function(ZIP){
            postal_code = ZIP;
            work_with_postal_code(postal_code);
        });
    });
work_with_postal_code = function(postal_code) {
    alert (postal_code);
}

blax 09.03.2012 13:55

Спасибо за классный ответ! Теперь разобрался. Скажу честно, матчасть я вообще не читал, так что часто вот на такой фигне стопарюсь. Все никак руки не дойдут. Может что посоветуете из литературы? Чтобы не совсем для чайников.

Gvozd 10.03.2012 00:42

Цитата:

Сообщение от blax
Может что посоветуете из литературы?

Вверху сайта есть навигация
Цитата:

Форум Учебник Книги Блоги Стандарт языка Мастер-классы по JavaScript Справочник
Статьи Тест знаний Аналоги функций PHP Песочница JS.Talks Курсы javascript
Материалов для обучения достаточно.
От себя книгу посоветовать не могу, так как учился в разнабой, в частности по статьям с данного сайта. Советую заглянуть в цкил статей про Ajax


Часовой пояс GMT +3, время: 22:39.