Javascript.RU

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

Сообщение от Rise Посмотреть сообщение
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);
}
Поймите, мне нужно возвратить результат из функции getAddressByCoordinates(lat, lon). Да, в Вашем варианте колбэк показывает значение, но как это значение возвратить во внешний мир?? то есть вызывая getAddressByCoordinates() я должен получить строку с адресом. или какимлибо другим способом мне надо получить строку с адресом ВО ВНЕШНИЙ МИР. джаваскрипт в моей программе исполняется в webView и из него надо достать значение строки. не могу понять джаваскрипт вобще.

В нем что, затираются ГЛОБАЛЬНЫЕ переменные, когда функция завершается (пробовал в колбэке присваивать значение глобальное переменной, а потом вывести ее значение из другого места программы - undefined)?
Ответить с цитированием
  #12 (permalink)  
Старый 14.11.2013, 10:02
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

Сообщение от a_l Посмотреть сообщение
fluffyMan2000, ошибка в том, что вы пытаетесь работать с ассинхронными методами как с синхронными. Почитайте про ассинхронность js и всё встанет на свои места.
то есть когда я возвращаю значение из функции, то его еще нет, так как асинхронная функция-замыкание не отработала и не присвоила нужное значение? ясно. спасибо. буду думать дальше как это все связать
Ответить с цитированием
  #13 (permalink)  
Старый 14.11.2013, 10:50
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 912

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

Сообщение от Rise Посмотреть сообщение
Ну и производите в callback нужные вам действия с переменной в чем проблема
проблема была в том, что действия надо было произвести не в js, а в с++ программе, вызвавшей js скрипт. в общем, проблема решена. как было сказано выше, я не учитывал то, что функция работает асинхронно. поэтому когда я возвращал значение из getAddressByCoordinates(), то переменной не было присвоено значение, так как асинхронная функция ничего не присвоила переменной еще. она присвоит потом, когда уже будет вызван return.

в общем решилось все высылкой сигнала с нужным параметром-фдресом (в Qt есть такая полезная вещь) из асинхронной функции в с++ программу.

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

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


где jsObject - Qt/c++ объект с сигналом void address(QString address, int pointId)
Ответить с цитированием
  #15 (permalink)  
Старый 14.11.2013, 11:20
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

проблема была в том, что действия надо было произвести не в js, а в с++ программе, вызвавшей js скрипт. в общем, проблема решена. как было сказано выше, я не учитывал то, что функция работает асинхронно. поэтому когда я возвращал значение из getAddressByCoordinates(), то переменной не было присвоено значение, так как асинхронная функция ничего не присвоила переменной еще. она присвоит потом, когда уже будет вызван return.

в общем решилось все высылкой сигнала с нужным параметром-адресом (в Qt есть такая полезная вещь) из асинхронной функции в с++ программу.

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

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


где jsObject - Qt/c++ объект с сигналом void address(QString address, int pointId)
Ответить с цитированием
  #16 (permalink)  
Старый 14.11.2013, 11:21
Интересующийся
Отправить личное сообщение для fluffyMan2000 Посмотреть профиль Найти все сообщения от fluffyMan2000
 
Регистрация: 13.11.2013
Сообщений: 11

jsru_, a_l, Rise, спасибо за помощь.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен календарь на 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