Javascript 如何从asyn/await函数向全局变量返回值?
我想将用户的地理位置返回给变量,以便其他函数稍后可以使用它。我尝试使用async/await函数,但它不起作用。我做错了什么Javascript 如何从asyn/await函数向全局变量返回值?,javascript,Javascript,我想将用户的地理位置返回给变量,以便其他函数稍后可以使用它。我尝试使用async/await函数,但它不起作用。我做错了什么 // Getting data class Data { static async getLatitude() { let latitude = await navigator.geolocation.getCurrentPosition((position) => { return position.coords.latitude;
// Getting data
class Data {
static async getLatitude() {
let latitude = await navigator.geolocation.getCurrentPosition((position) => {
return position.coords.latitude;
});
return latitude;
}
}
// Site running
window.addEventListener('load', () => {
if(navigator.geolocation) {
let latitude = Data.getLatitude();
console.log(latitude);
}
})
问题是
navigator.geolocation.getCurrentPosition
不返回承诺。这就是为什么不能使用async/await来获取其响应。您必须将其包装成一个承诺,以便能够使用async/await获得结果。以下是完整的代码:
class Data {
static async getLatitude() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition((position) => {
resolve(position.coords.latitude);
}, reject);
});
}
}
window.addEventListener('load', async () => {
if (navigator.geolocation) {
let latitude = await Data.getLatitude();
console.log(latitude);
}
})
问题是navigator.geolocation.getCurrentPosition
不返回承诺。这就是为什么不能使用async/await来获取其响应。您必须将其包装成一个承诺,以便能够使用async/await获得结果。以下是完整的代码:
class Data {
static async getLatitude() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition((position) => {
resolve(position.coords.latitude);
}, reject);
});
}
}
window.addEventListener('load', async () => {
if (navigator.geolocation) {
let latitude = await Data.getLatitude();
console.log(latitude);
}
})
您的处理程序需要关键字wait<代码>等待数据。getLatitude()
在移动到下一个语句之前将解析承诺3选项是回调、承诺或异步/等待方法。在进行异步编程时,将输出存储在变量中是不实际的。最好寻找使用异步函数的模式。你就快到了。尝试let latitude=wait Data.getLatitude()代码>。您所拥有的将设置latitude
为解析为latitude而不是latitude本身的承诺。@ali OP已经在尝试使用async Wait,他们只是缺少一些keywords@PatrickStephansen但是我只能在异步函数中使用wait,所以它不起作用。您的处理程序需要关键字wait<代码>等待数据。getLatitude()
在移动到下一个语句之前将解析承诺3选项是回调、承诺或异步/等待方法。在进行异步编程时,将输出存储在变量中是不实际的。最好寻找使用异步函数的模式。你就快到了。尝试let latitude=wait Data.getLatitude()代码>。您所拥有的将设置latitude
为解析为latitude而不是latitude本身的承诺。@ali OP已经在尝试使用async Wait,他们只是缺少一些keywords@PatrickStephansen但我只能在异步函数中使用wait,所以它不起作用