回调函数中变量的值 - Google Maps

时间:2014-11-03 13:09:20

标签: javascript google-maps google-maps-api-3

我试图获得在陆地(大陆)或水(海洋)上放置谷歌地图标记的返回值。当我尝试使用控制台日志时,我应该将标记放在陆地上,而将其放置在水上是假的。然而,标记的值似乎落后于一步:例如,将其置于水上将返回true,然后将其放置在陆地上将返回false,但将其再次置于陆地将再次返回true。

如何获得"结果"的正确价值?地理编码器回调函数内的变量?

为什么我会得到滞后的结果以及如何解决?

谢谢。

  var result = true;
        function checkMarkerOnLand(event) {

            var geocoder = new google.maps.Geocoder();

            geocoder.geocode({

                "latLng" : event.latLng

            }, function(results, status) {

                if (status !== google.maps.GeocoderStatus.OK) {

                    result = false;
                    //return result;

                } else {

                    result = true;
                    //return result;

                }

            });

            return result;

        }

1 个答案:

答案 0 :(得分:1)

回调的重点是: - 您向服务发送请求(该服务可能位于其他服务器上) - 当服务准备就绪时,它将触发您选择的回调(=您自己编写的功能)。

(相当于打电话给某人询问朋友的电话号码。他现在不知道,但他会在他回电话时给你回电话。一样)

发送请求后,代码就会继续。因此,在发送geocoder.geocode()之后,它会在服务准备好之前很久就执行返回结果。

所以不,你不能使用checkMarkerOnLand()作为返回结果的函数。 改变你的逻辑,这样你在计划结果时,你只需要在回调中处理它。