我试图获得在陆地(大陆)或水(海洋)上放置谷歌地图标记的返回值。当我尝试使用控制台日志时,我应该将标记放在陆地上,而将其放置在水上是假的。然而,标记的值似乎落后于一步:例如,将其置于水上将返回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;
}
答案 0 :(得分:1)
回调的重点是: - 您向服务发送请求(该服务可能位于其他服务器上) - 当服务准备就绪时,它将触发您选择的回调(=您自己编写的功能)。
(相当于打电话给某人询问朋友的电话号码。他现在不知道,但他会在他回电话时给你回电话。一样)
发送请求后,代码就会继续。因此,在发送geocoder.geocode()之后,它会在服务准备好之前很久就执行返回结果。
所以不,你不能使用checkMarkerOnLand()作为返回结果的函数。 改变你的逻辑,这样你在计划结果时,你只需要在回调中处理它。