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, время: 01:28. |