С асинхронностью схема работы другая. Допустим у нас все работает синхронно. Мы делаем так:
var strAddr=GetAddress([lat,lon]);
alert(strAddr);// используем полученные данные
Однако у нас функция асинхронная, так что получается так:
function processAddress(strAddr) {
alert(strAddr); // используем полученные данные
}
//Функция получения адреса по заданным координатам
function getAddress(coords, callback){
ymaps.ready(function () { //Если API готов
// Отправим запрос на геокодирование
ymaps.geocode(coords).then(function (res) {
var names = [];
// Переберём все найденные результаты и
// запишем имена найденный объектов в массив names
res.geoObjects.each(function (obj) {
names.push(obj.properties.get('name'));
});
/*
Тут я могу получить адрес после успешного геокодирования
*/
callback(names);
});
});
}
getAddress([lat,lon], processAddress);