javascript函数返回undefined但在alert上工作正常

时间:2017-02-11 20:11:35

标签: javascript php function google-maps es6-promise

我正在使用谷歌地图api,其中有我传递地址的功能,该函数返回纬度和经度,但在此代码函数返回我未定义,但当我使用警报而不是返回它's工作正常,请告诉我这段代码我错在哪里。 我在过去使用ajax代码时有同样的问题,但我使用async = false。



<script>
  function GetLocation(address) {
            var geocoder = new google.maps.Geocoder();
           
            geocoder.geocode({ 'address': address }, function (results, status) {
          
        
                if (status == google.maps.GeocoderStatus.OK) {
                    var latitude = results[0].geometry.location.lat();
                    var longitude = results[0].geometry.location.lng();
          return longitude;
          //          alert("Latitude: " + latitude + "\nLongitude: " + longitude);
          // return latitude;
           
                } else {
                  
            return "Request failed.";
                } 
        
            });

        };  
 
 
 var abc = GetLocation(address);

alert(abc);

</script>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

您的geocode()是异步通话,您无法从中返回任何内容。所以你需要继续你的逻辑,这取决于回调函数中的结果。

或者你需要使用Promise,并改变一些逻辑来实现结果。但是再次使用Promises,你无法从中返回任何东西。 |

在此代码中,您将从函数中创建一个Promise的返回值。 Promise将使用 2 函数,如果所有内容都确定,则为一个,如果出现问题,则为第二个函数。如果一切正常,请使用参数调用它。在Promise,您可以调用.then()函数并将其传递给它2个函数:第一个将作为resolve function传递,第二个将作为reject function传递。所以在这种情况下,当你调用resolve时,它会将参数传递给.then()的第一个函数,然后你就可以得到它。

&#13;
&#13;
function GetLocation(address) {
  return new Promise(function(resolve, reject) { 
      var geocoder = new google.maps.Geocoder();
      geocoder.geocode({ 'address': address }, function (results, status) {
                  
         if (status == google.maps.GeocoderStatus.OK) {
             var latitude = results[0].geometry.location.lat();
             var longitude = results[0].geometry.location.lng();
             resolve(longitude);
         } else { 
             reject("Request failed.");
         }         
      });
   });    
};
             
var address = 'yourAddress';
GetLocation(address).then(longitude => alert(longitude));
&#13;
&#13;
&#13;

承诺的基本示例

&#13;
&#13;
new Promise((resolve, reject) =>{
  var a = true; // < Here `a` is true, so resolved function is called in `then`
  if(a){
    resolve(a); 
  } else {
    reject('A is not True !');
  }  
}).then(val => alert(val));


new Promise((resolve, reject) =>{
  var a = false; // < Here `a` is false, so rejected function is called `then`
  if(a){
    resolve(a); 
  } else {
    reject('A is not True !');
  }  
}).then(val => alert(val), err => alert(err));
&#13;
&#13;
&#13;