我正在使用谷歌地图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;
答案 0 :(得分:2)
您的geocode()
是异步通话,您无法从中返回任何内容。所以你需要继续你的逻辑,这取决于回调函数中的结果。
或者你需要使用Promise,并改变一些逻辑来实现结果。但是再次使用Promises,你无法从中返回任何东西。 |
在此代码中,您将从函数中创建一个Promise
的返回值。 Promise
将使用 2 函数,如果所有内容都确定,则为一个,如果出现问题,则为第二个函数。如果一切正常,请使用参数调用它。在Promise
,您可以调用.then()
函数并将其传递给它2个函数:第一个将作为resolve function
传递,第二个将作为reject function
传递。所以在这种情况下,当你调用resolve
时,它会将参数传递给.then()
的第一个函数,然后你就可以得到它。
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;
承诺的基本示例
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;