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

तो जब मैं getAddr को कॉल करता हूं, मुझे अपरिभाषित हो जाता है, तो सेब को पहले सतर्क किया जाता है और फिर नाशपाती होती है। मुझे एहसास है कि Google नक्शे geocodes asynchronously, लेकिन यह काम करने का कोई तरीका है?Google मानचित्र geocoder के लिए प्रतीक्षा कर रहा है?

उत्तर

10

आप इसे इस तरह से करने में सक्षम नहीं होंगे। आपके पास Google के geocoder के लिए एक एसिंक्रोनस कॉल है, जिसका अर्थ है कि आप GetAddr परिणामों को वापस करने में सक्षम नहीं होंगे। इसके बजाय आप कुछ इस तरह करना चाहिए:

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

और फिर आप इस तरह अपने कोड में उपयोग करें:

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

संपादित करें: यदि आप आप चाहते हैं भी अधिक स्थिति मान्यता जोड़ सकते हैं:

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

और तुम ऐसे ही इसका इस्तेमाल कर सकते हैं:

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

महान उदाहरण, धन्यवाद! – g33kz0r

संबंधित मुद्दे