Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript: функция возвращает undefined. Подскажите где я туплю (https://javascript.ru/forum/misc/42917-javascript-funkciya-vozvrashhaet-undefined-podskazhite-gde-ya-tuplyu.html)

fluffyMan2000 14.11.2013 10:02

Цитата:

Сообщение от a_l (Сообщение 280989)
fluffyMan2000, ошибка в том, что вы пытаетесь работать с ассинхронными методами как с синхронными. Почитайте про ассинхронность js и всё встанет на свои места.

то есть когда я возвращаю значение из функции, то его еще нет, так как асинхронная функция-замыкание не отработала и не присвоила нужное значение? ясно. спасибо. буду думать дальше как это все связать

fluffyMan2000 14.11.2013 11:18

Цитата:

Сообщение от Rise (Сообщение 281022)
Ну и производите в 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)

fluffyMan2000 14.11.2013 11:20

проблема была в том, что действия надо было произвести не в 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)

fluffyMan2000 14.11.2013 11:21

jsru_, a_l, Rise, спасибо за помощь.


Часовой пояс GMT +3, время: 20:00.