JavaScript: функция возвращает undefined. Подскажите где я туплю
Добрый день.
JavaScript разработчики - откликнитесь)) Пишу некую картографическую программу. Связка javascript/qwebkit/qt. Использую yandex maps api 2.0. Есть функция, которая должна возвращать адрес по координатам, но она возвращает undefined. В джаваскрипте не силён, прошу помощи, почему такое поведение? Код:
function getAddressByCoordinates(lat, lon) что не так с областью видимости переменной res? |
походу У тебя изменяется рес тот что сидит в параметре а не в замыкании
var a = 1; (function (a) { a = 2; })(a) alert(a); var a = 1; (function () { a = 2; })() alert(a); |
Не совсем понимаю, как в моем случае правильно возвратить результат? Почему из этой функции-замыкания я не могу присвоить значение локальной переменной?
|
В смысле поменять название локальной переменной? Да пробовал, результат то же
|
вообщем убери res отсюда then(function (res) и будет вот так then(function ()
|
Цитата:
|
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, То же самое |
Вложений: 1
Вот исходник. Посмотрите пожалуйста.
Препарируемая функция в конце файла |
fluffyMan2000, ошибка в том, что вы пытаетесь работать с ассинхронными методами как с синхронными. Почитайте про ассинхронность js и всё встанет на свои места.
|
Цитата:
В нем что, затираются ГЛОБАЛЬНЫЕ переменные, когда функция завершается (пробовал в колбэке присваивать значение глобальное переменной, а потом вывести ее значение из другого места программы - undefined)? |
Цитата:
|
Цитата:
в общем решилось все высылкой сигнала с нужным параметром-фдресом (в 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) |
проблема была в том, что действия надо было произвести не в 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) |
jsru_, a_l, Rise, спасибо за помощь.
|
Часовой пояс GMT +3, время: 07:03. |