如何在 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)
})
我已经将以下 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)
})