2013-11-17 6 views
3

Я боролся с этим в течение нескольких часов, и даже после прочтения нескольких примеров в Stack я не смог получить эту работу. Это не помогает, что я новичок JS.Использование функции обратного вызова с Google Geocode

Я пытаюсь получить информацию об адресе из API геокодирования Google, а затем передать объект другой функции. В моем чтении я понимаю, что функция, которую я использую для извлечения информации, является асинхронной, поэтому мне нужно использовать функцию обратного вызова для ее чтения. Однако, когда я пытаюсь сделать это, я все равно получаю «неопределенный», возвращенный моей консолью. Я знаю, что информация поступает от Google точно, поскольку, когда я использую console.log() в объекте результата, он возвращается правильно.

В любом случае, вот что я работаю с:

function onSuccess(position) { 
    getLocationData(position, function(locationData) { 
    console.log(locationData); 
    }); 
} 

function getLocationData(position, callback) { 
    geocoder = new google.maps.Geocoder(); 
    var location = 'Billings,MT'; 

    if(geocoder) { 
    geocoder.geocode({ 'address': location }, function (results, status) { 
     if(status == google.maps.GeocoderStatus.OK) { 
     return results[0]; 
     } 
    }); 
    } 
    callback(); 
} 

Как я уже говорил, хотя, все я с этим «не определен». Если я поставлю 'console.log (результаты [0])' над возвратом getLocationData(), возвращенный объект верен. Любая помощь приветствуется.

+0

возможно дубликат https://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function – Bergi

ответ

9

Ваша проблема в том, что вы не подключили обратный вызов к возврату. Поскольку сама функция geocode() уже асинхронна, return не имеет никакого эффекта. Вместо этого вы должны передать значения, возвращаемые здесь напрямую, в функцию обратного вызова. Как это:

function getLocationData(position, callback) { 
    geocoder = new google.maps.Geocoder(); 
    var location = 'Billings,MT'; 

    if(geocoder) { 
    geocoder.geocode({ 'address': location }, function (results, status) { 
     if(status == google.maps.GeocoderStatus.OK) { 
     callback(results[0]); 
     } 
    }); 
    } 
} 
+0

Max, вы спасатель! Спасибо! – DEUTSCHWULF

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