【发布时间】:2014-09-29 18:42:39
【问题描述】:
我有一个函数,在一个外部 .js 文件中,它应该获取地址字符串,然后返回纬度和经度。它什么也不返回。有人可以帮忙吗?
我也想问一下;在 javascript 中,当您从另一个函数中调用异步函数时;异步函数是否会在外部函数终止后立即终止?
这是代码,任何人都可以解释为什么它不返回任何东西吗?谢谢。
function FindLatLong(address)
{
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
return { Status: "OK", Latitude: lat, Longitude: lng };
}
});
}
(我当然在上面包含了 google maps js lib)
我基本上没有从地理编码器得到 OK 的结果;如果我不将它放在 FindLatLong 函数中,则相同的代码可以工作,而是将其嵌入到我调用 FindLatLong 的位置,即上面的代码在放入 FindLatLong 函数时不起作用,但如果我将它用作调用 javascript 的一部分代码。该函数确实被调用,Geocoder() 确实被调用,但没有返回“OK”结果,实际上没有返回任何结果,甚至没有来自谷歌的错误。
地址字符串是“伦敦,英国”
【问题讨论】:
-
是的,它是异步的。你不能
return。外部函数在异步“完成”之前已经返回并调用回调。 -
jfriend00 是错误的。我查看了链接,阅读了长长的回复,没有上述问题/问题不重复。尽管面临的问题与异步功能有关;一个链接,它是异步编程的介绍和处理它的多种方法 - 不是上述问题的“解决方案”。这就像发送指向有关该问题的书籍的链接。对于可能不知道问题的确切性质的人来说,具体的答案会很有帮助。
-
Bergi,能否提供上述代码的示例实现?谢谢。
-
我认为问题的本质在@jfriend 链接的帖子中得到了很好的描述(另见this one)。它可能不是完全重复的,但异步函数是
xhr.onload还是geocoder.geocode并没有太大区别。您是否尝试过实现回调解决方案? -
我现在确实找到了一个完全相同的副本。希望对您有所帮助。
标签: javascript asynchronous geocoding google-geocoder