2015-08-10 2 views
-1

У меня есть некоторые проблемы, определяющие position внутри моей функции geocode. Я получаю правильный результат в своей функции, но я не могу использовать его вне функции.Могу ли я определить переменную внутри функции обратного вызова

var position; 

var geocoder = new google.maps.Geocoder(); 

geocoder.geocode({ 
    'address': row.Address + ' ' + row.Postal_Code + ' ' + row.City + ' ,' + row.Country 
}, function(results, status) { 
    if(status == google.maps.GeocoderStatus.OK) { 
    position = results[0].geometry.location; // console.log(position) // correct result 
    } 
}); 

console.log (результат); // Undefined

ответ

-1

Вы указали переменную position в своей функции обратного вызова, и теперь вы пытаетесь вывести переменную result на консоль. Эта переменная никогда не была объявлена ​​или назначена. Он обязательно должен вернуть undefined.

Он должен работать:

console.log(position); 

Update:
ОК, теперь, немного коррекции - google.maps.Geocoder является асинхронным метода. ОП не упоминал об этом нигде в должности - мне пришлось найти эту библиотеку, загрузить ее, исследовать ее API и изучить ее самостоятельно.
На мой взгляд, все пользователи не обязательно знать все сторонние библиотеки, и в этом случае, я был прав - этот код будет выходной undefined даже если метод является синхронным, как он по-прежнему выдает неопределенную переменную.

+0

Вы уверены, что ???? –

+0

Я определяю позицию внутри своей функции, и внутри моей функции она имеет правильный результат. – andershagbard

+0

@ MatíasFidemraizer Ok. Я не уверен, что 'console.log (position)' должен работать. Я уверен, что переменная 'result' никогда не была объявлена ​​или назначена. Как он должен делать правильный вывод? –

1

Если вы не запускаете свою функцию в геокоде, значение не присваивается переменной позиции.

var position; 
function forPosition(results, status) { 
    if(status == google.maps.GeocoderStatus.OK) { 
    position = results[0].geometry.location; 
} 
forPosition();// now position is set to results[0].geometry.location; 

У вас есть анонимная функция, которая должна запускаться, чтобы присвоить значение переменной.

Или просто в примере ниже

var greeting = "Hello"; 
 
function func(){ 
 
    greeting = "hi" 
 
    alert(greeting) 
 
} 
 
//func() //uncommenting func() will result in alerting two times 'hi'. 
 
alert(greeting)

После функции FUNC побежал он устанавливает приветствие переменного «привет», и предупреждает переменную внутри функции, то предупреждение за рамки функция снова предупредит переменную приветствия. Если функция не запускает приветствие, всегда устанавливается значение «Hello».

Смежные вопросы