在同步方法中使用gmaps geocode异步方法无法返回true

时间:2015-02-25 19:07:11

标签: javascript jquery asp.net-mvc google-maps-api-3

我有一个异步方法,可以调用google maps geocoder来获取地址。它位于验证方法" LocationValidator"需要返回true或false。现在我似乎无法让它返回任何虚假的东西。看来,当"外线回调"被称为每次都返回false,即使我没有从" isResults"中返回任何内容。方法

这是我的代码



function LocationValidator(value, element, paras) {

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

    geocoder.geocode({ 'address': value }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {

            address = results[0].formatted_address;
            if (isResults("Inside callback", address)) {
                return true;
            }
        } else {
            return false;
        }
    });
    isResults("Outside callback", address);
}

function isResults(where, address) {

    if (address != "") {
        return true;
    }
}




1 个答案:

答案 0 :(得分:0)

地理编码是异步的,因此您在返回任何响应之前都会调用isResults("Outside callback", address);

此时地址等于"",这会触发您的验证错误显示。

另请注意,您声明var address两次,由于范围,它们将是单独的变量。您应该从地理编码回调闭包中的版本中删除var,或者根本不使用第一个版本。

目前外部变量address永远不会改变