2015-02-25 2 views
1

У меня есть асинхронный метод, который вызывает геокодер Google Maps для получения адреса. Это метод проверки местоположения «LocationValidator», который должен возвращать true или false. Прямо сейчас я не могу заставить его вернуть ничего, кроме ложного. Похоже, что когда вызывается «внешний обратный вызов», он возвращает false каждый раз, даже если я ничего не возвращаю из метода isResults.Не удается вернуть true, используя асинхронный метод gmaps geocode внутри синхронного метода

Вот мой код

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; 
 
    } 
 
}

ответ

0

геокодирования является асинхронным, так что вы звоните isResults("Outside callback", address); прежде, чем любой ответ будет возвращен.

В это время адрес равен "", который приведет к ошибке подтверждения проверки.

Также обратите внимание, что вы объявляете var address дважды, и из-за областей они будут отдельными переменными. Вы должны удалить var из версии внутри закрытия обратного вызова геокода или вообще не использовать первую версию.

В настоящее время внешняя переменная address никогда не изменится

+0

Но я ничего о призыве isResults не возвращаются («Вне обратного вызова», адрес) ;, я думал, что валидатор будет искать истинный или ложный быть возвращены? – user1186050