2012-02-19 17 views
6
geo = function(options){ 
    geocoder.geocode(options, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var x = results; 
      alert('pear'); 
      return x; 
     } else { 
      return -1; 
      } 
     }); 
    } 

getAddr = function(addr){ 
    if(typeof addr != 'undefined' && addr != null) { 
     var blah = geo({ address: addr, }); 
        alert('apple'); 
        return blah; 
    } 
    return -1; 
} 

Tak więc, gdy wywołuję getAddr, uzyskuję niezdefiniowane, również jabłko jest ostrzeżone, a następnie gruszka. Zdaję sobie sprawę, że Google mapuje asynchronicznie geokody, ale czy istnieje sposób, aby to zadziałało?Oczekiwanie na geokodera map Google?

Odpowiedz

10

Nie będziesz w stanie zrobić tego w ten sposób. Masz asynchroniczne połączenie z geokoderem google, co oznacza, że ​​nie będziesz w stanie uzyskać wyników getAddr. Zamiast tego należy zrobić coś takiego:

getAddr = function(addr, f){ 
    if(typeof addr != 'undefined' && addr != null) { 
     geocoder.geocode({ address: addr, }, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      f(results); 
      } 
     }); 
    } 
    return -1; 
} 

A potem użyć w kodzie tak:

getAddr(addr, function(res) { 
    // blah blah, whatever you would do with 
    // what was returned from getAddr previously 
    // you just use res instead 
    // For example: 
    alert(res); 
}); 

EDIT: Jeśli chcesz Można też dodać więcej sprawdzanie stanu:

getAddr = function(addr, f){ 
    if(typeof addr != 'undefined' && addr != null) { 
     geocoder.geocode({ address: addr, }, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      f('ok', results); 
      } else { 
      f('error', null); 
      } 
     }); 
    } else { 
     f('error', null); 
    } 
} 

I można go używać tak:

getAddr(addr, function(status, res) { 
    // blah blah, whatever you would do with 
    // what was returned from getAddr previously 
    // you just use res instead 
    // For example: 
    if (status == 'ok') { 
    alert(res); 
    } else { 
    alert("Error") 
    } 
}); 
+0

Świetny przykład, dziękuję! – g33kz0r