Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2013, 21:48
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

JavaScript: функция возвращает undefined. Подскажите где я туплю
Добрый день.

JavaScript разработчики - откликнитесь))

Пишу некую картографическую программу. Связка javascript/qwebkit/qt. Использую yandex maps api 2.0.

Есть функция, которая должна возвращать адрес по координатам, но она возвращает undefined. В джаваскрипте не силён, прошу помощи, почему такое поведение?
Код:
function getAddressByCoordinates(lat, lon)
{	 
    var res;
		
    ymaps.geocode([lat, lon]).then(function (res) 
    {
        var names = [];

        res.geoObjects.each(function (obj) 
	{
            names.push(obj.properties.get('name'));
        });
					
	res = names.reverse().join(', ');
					
	console.log(res);								
    });
				
    return res;
}
При чем текущий вывод на консоль показывает определенный адрес. если поставить вывод на консоль перед return - то undefined

что не так с областью видимости переменной res?
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2013, 22:37
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

походу У тебя изменяется рес тот что сидит в параметре а не в замыкании

var a = 1;
(function (a) {
 a = 2;

})(a)

alert(a);

var a = 1;
(function () {
 a = 2;

})()

alert(a);

Последний раз редактировалось jsru_, 13.11.2013 в 22:44.
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2013, 22:51
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

Не совсем понимаю, как в моем случае правильно возвратить результат? Почему из этой функции-замыкания я не могу присвоить значение локальной переменной?
Ответить с цитированием
  #4 (permalink)  
Старый 13.11.2013, 22:51
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

В смысле поменять название локальной переменной? Да пробовал, результат то же
Ответить с цитированием
  #5 (permalink)  
Старый 13.11.2013, 22:54
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

вообщем убери res отсюда then(function (res) и будет вот так then(function ()
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2013, 23:17
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

Сообщение от jsru_ Посмотреть сообщение
вообщем убери res отсюда then(function (res) и будет вот так then(function ()
Этого делать нельзя. Этот параметр нужен. В нем хранятся geoobjects. В общем так в примерах Яндекс масс апи было.
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2013, 23:23
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

function getAddressByCoordinates(lat, lon)
{	 
    var resss;
		
    ymaps.geocode([lat, lon]).then(function (res) 
    {
        var names = [];

        res.geoObjects.each(function (obj) 
	{
            names.push(obj.properties.get('name'));
        });
					
	res = names.reverse().join(', ');
					
	resss = res;

        console.log(ress); // выводится адрес
    });

    console.log(ress); // выводится undefined
				
    return resss;
}


Rise, То же самое

Последний раз редактировалось fluffyMan2000, 13.11.2013 в 23:30.
Ответить с цитированием
  #8 (permalink)  
Старый 13.11.2013, 23:26
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

Вот исходник. Посмотрите пожалуйста.

Препарируемая функция в конце файла
Вложения:
Тип файла: zip map.zip (2.0 Кб, 9 просмотров)

Последний раз редактировалось fluffyMan2000, 13.11.2013 в 23:29.
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2013, 00:17
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

function getAddressByCoordinates(lat, lon)
{	 
		
    ymaps.geocode([lat, lon]).then(function (res) 
    {
        var names = [];

        res.geoObjects.each(function (obj) 
	{
            names.push(obj.properties.get('name'));
        });
					
	res = names.reverse().join(', ');

	callback(res);
					
    });
				
}

function callback(res) {
	alert(res);
}
Ответить с цитированием
  #10 (permalink)  
Старый 14.11.2013, 08:55
Аватар для a_l
a_l a_l вне форума
Кандидат Javascript-наук
Отправить личное сообщение для a_l Посмотреть профиль Найти все сообщения от a_l
 
Регистрация: 15.09.2011
Сообщений: 143

fluffyMan2000, ошибка в том, что вы пытаетесь работать с ассинхронными методами как с синхронными. Почитайте про ассинхронность js и всё встанет на свои места.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен календарь на javascript. Где взять? javascript_pupil Общие вопросы Javascript 8 07.10.2011 18:34
подскажите где ошибка пожалуйста satyr22 Javascript под браузер 2 24.08.2011 11:00
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47
Подскажите где найти нужный материал. Yoksven Общие вопросы Javascript 7 18.06.2010 02:48
Функция не возвращает false, почему? Vitaly jQuery 3 05.07.2009 16:05