GClientGeocoder.getLatLng
является асинхронной операцией , поэтому вы не можете иметь оператор return
в getPoint
на самом деле делать то, что ожидаете.
Вы должны реструктурировать свой код, чтобы получить функцию обратного вызова, которую вы вызываете, когда асинхронная операция завершается :
function getPoint(address, callback) {
var geocoder = new GClientGeocoder();
geocoder.getLatLng(
address,
function(point){
/* asynch operation complete.
* Call the callback with the results */
callback(point)
}
);
}
или даже лучше (хотя и немного более эзотерически):
function getPoint(address, callback) {
var geocoder = new GClientGeocoder();
geocoder.getLatLng(
address,
callback // GClientGeocoder will call the callback for you
);
}
Редактировать Ваш вопрос к комментарию:
ОК, это совсем другой вопрос, но в двух словах, обратный вызов функции JavaScript, который вы передадите, будет иметь доступ к вашему экземпляру карты, если вы определите функцию в той же области, в которой определен экземпляр карты:
var map = new GMap2(/*...*/);
var addresses = []; // list of address strings
for(var i=0; i < addresses.length; i++) {
getPoint(addresses[i], function(point) { // pass the callback function
map.addOverlay(/*...*/); // map variable is in scope
})
}
Этот стиль функции называется замыканием.