我已经为此苦苦挣扎了几个小时,即使在阅读了Stack上的几个示例后,我也无法使它正常工作。我是JS新手,这无济于事。
我正在尝试从Google Geocoder API检索有关地址的信息,然后将该对象传递给另一个函数。根据我的阅读,我了解到我用来检索信息的函数是异步的,因此我需要使用一个回调函数来读取它。但是,当我尝试执行此操作时,控制台仍然返回“ undefined”。我知道该信息来自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(results [0])’放在getLocationData()返回值上方,则返回的对象是正确的。任何帮助将非常感激。
您的问题是,您没有将回调连接到返回值。由于geocode()函数本身已经是异步的,因此return对它没有任何影响。相反,您必须将您在此处返回的值直接传递给回调函数。像这样:
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]); } }); } }