Вернуть переменную в функцию из данных обратного вызова метода в той же функции - PullRequest
0 голосов
/ 15 апреля 2010

Как вернуть переменную latlon для функции codeAddress. return latlon не работает, возможно, из-за области видимости, но я не уверен, как заставить это работать.

function codeAddress(addr) { 
       if (geocoder) { 
           geocoder.geocode({ 'address': addr}, function(results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                    var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b;  
                    } else {
                       alert("Geocode was not successful for the following reason: " + status);
                   }

       });
     }  
   } 

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Объявите переменную во внешней функции, установите ее во внутренней функции и верните во внешнюю:

function codeAddress(addr) { 
  var returnCode = false;
  if (geocoder) { 
    geocoder.geocode({ 'address': addr}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var latlon = results[0].geometry.location.c+","+results[0].geometry.location.b;
        returnCode = true;
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }  
  return returnCode;
}

ПРИМЕЧАНИЕ. Это будет работать только в том случае, если внутренняя функция запущена сразу!

0 голосов
/ 15 апреля 2010

Вы не можете вернуть результат geocoder.geocode из codeAddress, поскольку geocoder.geocode вернет свой результат в указанный вами обратный вызов / замыкание. Вы должны продолжить использование обратного вызова, заданного в качестве аргумента вашей функции codeAddress.

Возврат чего-либо из вашего обратного вызова, переданного geocoder.geocode обратно в geocoder.geocode, не будет иметь никакого смысла в вашем приложении. Вы должны вызвать некоторую функцию в вашем приложении из обратного вызова, который вы предоставляете в geocoder.geocode.

Это объясняется в запросах геокодирования раздела API.

...