Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 如何从asyn/await函数向全局变量返回值?_Javascript - Fatal编程技术网

Javascript 如何从asyn/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;

我想将用户的地理位置返回给变量,以便其他函数稍后可以使用它。我尝试使用async/await函数,但它不起作用。我做错了什么

// 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,所以它不起作用