Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试从leaftlet地理编码器返回纬度和经度值_Javascript_Leaflet_Geocoding - Fatal编程技术网

Javascript 尝试从leaftlet地理编码器返回纬度和经度值

Javascript 尝试从leaftlet地理编码器返回纬度和经度值,javascript,leaflet,geocoding,Javascript,Leaflet,Geocoding,我一直在试图找出如何从geocoder块获取或返回值,并在另一个函数中使用该值。我不断得到一个变量未定义的错误 geocoder=newl.Control.geocoder.namitm(); 变量位置=$('.location').text(); 地理编码(位置、功能(结果){ var latLng=new L.latLng(结果[0].center.lat,结果[0].center.lng); var标记=新的L.标记(latLng); //console.log(Object.value

我一直在试图找出如何从
geocoder
块获取或返回值,并在另一个
函数中使用该值。我不断得到一个
变量未定义的错误

geocoder=newl.Control.geocoder.namitm();
变量位置=$('.location').text();
地理编码(位置、功能(结果){
var latLng=new L.latLng(结果[0].center.lat,结果[0].center.lng);
var标记=新的L.标记(latLng);
//console.log(Object.values(latLng));
var geocodeLocation=对象值(latLng);
});
函数loc(){
console.log(地理编码定位);
}


菲律宾
正如我在评论中所说,如果您在全局范围内声明geocodeLocation,并且函数geocoder.geocode是异步的,那么无法保证在使用它时会设置变量。我能想到的解决这个问题的唯一方法(即在其他地方使用地理编码定位)就是使用承诺。通过这种方式,您实际上可以返回geocodeLocation

关于异步执行如何工作的快速说明。(别担心,我也曾问过如何从异步调用返回)

假设我们有两个功能

function1()
function2()
function1()
是异步的。这意味着
function2()
不会等待
function1()
结束后才开始运行。但是
Geocoder.geocode
的回调(您传递给它的函数)只有在它完成异步操作时才会被调用。但是
function2()
将已被调用

但有一种方法可以返回值(使用async/await),大致如下:

函数geocode(location,func){//这是geocoder.geocode
//用位置计算坐标
var results={坐标:{lat:'37.423021',长:'-122.083739'}
func(结果);
}
异步函数fetchGeocodeLocation(位置){
var promise=newpromise((resolve,reject)=>{//将geocoder.geocode函数包装在promise中
地理编码(位置、功能(结果){
//var latLng=new L.latLng(结果[0].center.lat,结果[0].center.lng);
//var标记=新的L.标记(latLng);
//console.log(Object.values(latLng));
//var geocodeLocation=对象值(latLng);
解决(结果、坐标);
});
});
var geoCodeLocation=等待承诺;
返回地理协同定位;
}

fetchGeocodeLocation(“某处”)。然后(geoCodeLocation=>console.log(“geoCodeLocation”,geoCodeLocation))
在geocode块之外声明
geocodeLocation
,然后分配itI之前这样做过,它返回了一个
未定义的
结果,然后请提供一个工作示例来重现该问题。如果geocoder.geocode是异步的,并且您全局声明geocodeLocation,无法知道,当您实际使用该变量时,它是由回调函数设置的。你不能在回调函数中调用函数loc吗?