【问题标题】:Google Geocoding, Asynchronous Javascript, not working [duplicate]谷歌地理编码,异步Javascript,不工作[重复]
【发布时间】: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


【解决方案1】:

方法是异步的,所以使用回调!

function FindLatLong(address, callback)
{
    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();
            callback({ Status: "OK", Latitude: lat, Longitude: lng });
        }
    });
}

并调用函数:

FindLatLong(address, function(data) {
    console.log(data);
});

【讨论】:

  • tymeJV,非常感谢您的回复。我已经阅读了某人在顶部发布的链接上的内容。我知道外部函数在地理编码完成之前返回。我不明白的是 - 1)在我上面的代码中,我不应该从 FindLatLng 函数中“返回”吗? 2)在您的代码中,什么是“回调”,它是一个函数,即是什么使它成为回调,该函数的定义在哪里?谢谢!
  • callback(…) 表示这是调用由参数提供给您的callback 函数的点。 什么使它成为函数? - 传递的值。 此函数在哪里定义? - 在示例调用(第二个 sn-p)中,您会看到第二个参数的函数表达式。
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多