2012-02-19 7 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; 
} 

Así que cuando llamo a getAddr no me definen, también se avisa a apple primero y luego pera. Me doy cuenta de que Google Maps geocodifica de manera asíncrona, pero ¿hay alguna manera de hacer que esto funcione?¿Está esperando el geocodificador de google maps?

Respuesta

10

No podrá hacerlo de esa manera. Tiene una llamada asincrónica al geocodificador de google, lo que significa que no podrá hacer que getAddr devuelva los resultados. En su lugar debe hacer algo como esto:

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

Y luego utilizar en su código así:

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: Si desea que también podría añadir más de validación de estado:

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

Y se puede usar así:

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

¡Gran ejemplo, gracias! – g33kz0r

Cuestiones relacionadas