2016-01-26 3 views
0

Вот что я работаю с: getLocation ('123 Foobar Ln');Узел Ошибка обратного вызова геокодера Google

function getLocation(location) { 
    console.log(location); // prints 123 Foobar Ln 
    getLocationData(location, function(gotLocation) { 
    console.log('hello?'); // this doesn't print 
    return gotLocation; 
    }); 
} 

function getLocationData(location, callback) { 
    geocoder.geocode(location, function(err, res) { 
    if (res[0] != undefined) { 
     geoaddress = (res[0].formattedAddress); 
     addressmessage = 'Formatted Address: ' + geoaddress; 
     callback(addressmessage); 

    } else { 
     geocoder.geocode(cleanedAddress, function(err, res) { 
     addressmessage = 'null'; 
     if (res[0] != undefined) { 
      geoaddress = (res[0].formattedAddress); 
      addressmessage = 'Formatted Address: ' + geoaddress; 
      callback(addressmessage); 
     } else { 
      addressmessage = 'Address could not be found: ' + location; 
      callback(addressmessage); 

     } 
     }); 
    } 
    }); 
} 

Я изо всех сил стараюсь, чтобы getLocation делал что-либо с обратным вызовом из getLocationData.

только Ouput я получаю, когда я бегу следующее: 123 Foobar Ln

Может кто-то указать на то, что я делаю неправильно здесь?

+0

Вы никогда его не называете. вы просто установите его равным этой строке. – 1252748

+0

Исправлено, что с помощью 'callback (addressmessage), но он все равно ничего не возвращает =/ –

+0

Сначала методы' geocode' являются aysnc, поэтому вы вызываете свой обратный вызов до их завершения. переместите его на дно функции обратного вызова в каждом. Кроме того, вы не используете свои параметры ошибки. В будущем ниже каждой функции с параметром ошибки выведите ошибку, если она существует, чтобы получить некоторое представление. 'if (err) {console.log ('geocode error', err);}', 'if (err) {console.log ('geocode clean error', err);}' – 1252748

ответ

0

Возможно, ошибка в том, что вы больше всего беспокоитесь, что вы ищете индекс 0 из res и res является объектом. Теперь, что использование обратного вызова фиксирован, это единственная оставшаяся проблема, кроме

  1. cleanedaddress не определен, но я просто принять это как должное, что она должна быть где-то выше в коде.
  2. 123 Foobar Lane - это адрес, который, вероятно, не существует, но, возможно, вы просто использовали его для сообщения.

Упрощенная рабочая версия:

var geocoder = require('google-geocoding'); 
//https://www.npmjs.com/package/google-geocoding 

function getLocation(location) { 
    getLocationData(location, function(latLong) { 
    console.log('latLong:', latLong); 
    }); 
} 

function getLocationData(location, callback) { 
    geocoder.geocode(location, function(err, res) { 
    if (err){ 
     console.log('geocode error', err); 
    }else{ 
     callback(res); 
    } 
    }); 
} 

getLocation('1060 W Addison St, Chicago, IL 60613'); 

// => latLong: { lat: 41.9474536, lng: -87.6561341 } 

Надеется, что это помогает.

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