在javascript中返回变量之前,如何将navigator.geolocation.getCurrentPosition()中的纬度和经度存储到变量中

在javascript中返回变量之前,如何将navigator.geolocation.getCurrentPosition()中的纬度和经度存储到变量中,javascript,asynchronous,geolocation,Javascript,Asynchronous,Geolocation,我编写了以下JavaScript函数来返回纬度和经度值,因此我尝试将它们存储到变量中并返回这些变量,但由于navigator.geolocation.getCurrentPosition()函数是异步返回操作,在此之前会发生,并且我的函数始终返回未定义的值。有人能告诉我异步函数之后返回值的方法吗 函数getLocation(){ 设lat=0 设long=0 if(导航器.地理位置){ navigator.geolocation.getCurrentPosition(函数(位置){ conso

我编写了以下JavaScript函数来返回纬度和经度值,因此我尝试将它们存储到变量中并返回这些变量,但由于navigator.geolocation.getCurrentPosition()函数是异步返回操作,在此之前会发生,并且我的函数始终返回未定义的值。有人能告诉我异步函数之后返回值的方法吗

函数getLocation(){ 设lat=0 设long=0 if(导航器.地理位置){ navigator.geolocation.getCurrentPosition(函数(位置){ console.log(position.coords.latitude,position.coords.longitude) 纬度=位置坐标纬度 long=position.coords.longitude //log(“LATLONG1:,lat,long)//test。。 }) } 返回[横向,纵向]
} <代码> > p>因为我理解你想从函数中返回LAT和long值,你应该在“IF”语句的中间去掉这个“返回”语句。 异步函数getLocation(){ 设lat=0 设long=0 if(导航器.地理位置){ 等待navigator.geolocation.getCurrentPosition(函数(位置){ console.log(position.coords.latitude,position.coords.longitude) 纬度=位置坐标纬度 long=position.coords.longitude //log(“LATLONG1:,lat,long)//test。。 }) } 返回[横向,纵向] }
遵循@spating的推理,但经过一些修改:

function getLocation() {
        let lat = 0
        let long = 0
        if(navigator.geolocation) {
            navigator.geolocation.getCurrentPosition( async function(position) {
                console.log(position.coords.latitude, position.coords.longitude)
                lat = await position.coords.latitude
                long = await position.coords.longitude
          
                //console.log("LATLONG1: ", lat, long) //test..
            })
        }
      
        return [lat,long]
    } 

您的回调函数应该是异步函数,因为正是异步函数试图访问getCurrentPosition返回的值,非常感谢@Levi Ermonaites De Freitas和@spacing的帮助。在尝试了大量的解决方案后,虽然我没有得到绝对的答案,但我得出结论,我将使用navigator.geolocation.getCurrentPosition()函数创建一个承诺,并解析我想要的值,然后使用承诺,在需要的地方使用这些值(lat,long)。下面的代码将使我的陈述更清楚

//从函数中创建承诺
让getLocationPromise=新承诺((解决、拒绝)=>{
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
//console.log(position.coords.latitude,position.coords.longitude)//测试。。。
纬度=位置坐标纬度
long=position.coords.longitude
//log(“LATLONG1:,lat,long)//测试。。。
//解析我需要的值
解析({纬度:纬度,
经度:长})
})
}否则{
拒绝(“您的浏览器不支持地理定位API”)
}
})
//现在我可以使用后面的承诺。然后()
//使用程序中任意位置的值
getLocationPromise.then((位置)=>{
console.log(location.latitude)
}).catch((错误)=>{
console.log(错误)

})
哦,好吧,我认为这是错误编写的,如果没有第一次返回也不起作用。感谢您的帮助,但函数现在返回一个挂起的承诺对象。您的更改是有效的,但它不会改变“返回”操作发生在异步函数之前的事实。结果,它返回我[0,0]。放置一个console.log,只说“hello”,看看您的代码对if语句的求值是否为真。console.log(position.coords.latitude,position.coords.longitude)打印纬度和经度值,这意味着if语句的求值为真。