Возврат объектов через асинхронные вызовы в JavaScript - PullRequest
0 голосов
/ 29 ноября 2011

Я разрабатываю программу на чистом Java , которая принимает адрес в виде текста и передает его API Google Map * для дальнейшего взлома Страна, штат и почтовый индекс .

Но я застрял где-то, где моя Java-программа выдает исключение, приводящее к неловким результатам.

Теперь я решил использовать java, интегрируя его с Rhino. Это потому, что я успешно разработал веб-страницу, которая берет строку и анализирует ее в Страна, Штат и Zip . Так что теперь я думаю, что я буду интегрировать этот файл JavaScript в мой файл Java с помощью Rhino.

           function showLocation(address) {
                var geocoder;
                if(!geocoder){
                    alert("GC is initialised");
                    geocoder = new GClientGeocoder();
                }

                geocoder.getLocations(address , function(response)
                     {
                        if (!response || response.Status.code != 200) {alert("Sorry, unable to locate that address");}
                        else {
                          place = response.Placemark[0];
                        }
                     }//END OF CALLBACK METHOD
                );//END OF GETLOCATIONS
           }//end of showLocation

Теперь мой вопрос заключается в том, как вернуть объект place , когда я вызываю showLocations ()

1 Ответ

2 голосов
/ 29 ноября 2011

Вы не можете! Поскольку getLocations является асинхронным, showLocation уже завершил выполнение, прежде чем response станет доступным.

Вам необходимо принять обратный вызов на showLocation. Есть некоторые другие проблемы, которые я исправлю ниже.

function showLocation(address, callback) {
    var geocoder = new GClientGeocoder(); // no need for !geocoder test--it will always be undefined!

    geocoder.getLocations(address , function(response) {
        if (!response || response.Status.code != 200) {
            alert("Sorry, unable to locate that address");
        } else {
            // you forgot the "var" before "place"--you were making a global variable "place"
            var place = response.Placemark[0];
            if (callback) callback(place);
        }
    });
}

Затем вы заставляете пользователя предоставлять обратный вызов следующим образом:

function placeCallback(place) {
    // do something with place object here
}
showLocation('my address', placeCallback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...