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

How store latitude and longitude from navigator.geolocation.getCurrentPosition() into a variable before returning the variable in javascript

我已经将以下 JavaScript 函数写入 return 纬度和经度值,因此我试图将它们存储到变量和 return 那些变量中,但是由于 navigator.geolocation.getCurrentPosition() 函数是异步的 return 动作在此之前发生,我的函数总是 return 未定义。谁能告诉我在异步函数后获得 return 值的方法?

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

因为我的理解是你想要 return 函数中的纬度和经度值,你应该去掉 "if" 中间的这个 "return" 语句声明。

我认为async/await应该可以解决这里的问题

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

遵循@spacing 的推理,但有一些修改:

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() 函数中创建一个 promise 并解析我想要的值并使用promise 后跟 then() 以在我需要的任何地方使用这些值(纬度、经度)。下面的代码将使我的陈述更清楚。

// Creating a promise out of the function
let getLocationPromise = new Promise((resolve, reject) => {
    if(navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {

            // console.log(position.coords.latitude, position.coords.longitude) //test...

            lat = position.coords.latitude
            long = position.coords.longitude

            // console.log("LATLONG1: ", lat, long) //test...

            // Resolving the values which I need
            resolve({latitude: lat, 
                    longitude: long})
        })

    } else {
        reject("your browser doesn't support geolocation API")
    }
})

// Now I can use the promise followed by .then() 
// to make use of the values anywhere in the program
getLocationPromise.then((location) => {
    console.log(location.latitude)
}).catch((err) => {
    console.log(err)
})