Waiting for google maps geocoder?

前端 未结 1 1540
一向
一向 2020-12-17 23:51
geo = function(options){
    geocoder.geocode( options, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var x = result         


        
相关标签:
1条回答
  • 2020-12-18 00:37

    You will not be able to do it that way. You have an asynchronous call to google's geocoder, which means you will not be able to have the getAddr return the results. Instead you should do something like this:

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

    And then you use in your code like that:

    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: If you want to you could also add more status validation:

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

    And you can use it like that:

    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 讨论(0)
提交回复
热议问题