javascript 有没有一种方法可以暂停提取,直到获得地理位置?

ego6inou  于 10个月前  发布在  Java
关注(0)|答案(1)|浏览(40)

我正在使用国家气象局警报API,它可以根据位置提供天气警报。不错的东西。我想缩小信息,只拉基于用户的地理位置,这是一个可行的选择和测试手动输入html地址,并结束它与纬度长。我试图通过获取它们的位置并将其添加到返回并在fetch行中使用的字符串中来自动化html构建过程。当我运行此命令时,控制台显示地址缺少lat long。
我没有尝试过太多的以外,因为我真的不知道另一种方法来做到这一点。

<body onLoad="loadAlerts()">

  <p id="demo"></p>

  <script>
    function loadAlerts() {

      fetch(alertDataForUserLocation)
        .then(response => response.json())
        .then(data => {
          console.log(data) // Prints result from `response.json()` in getRequest
        })
        .catch(error => console.error(error))

      function alertDataForUserLocation() {
        var lat = "";
        var long = "";
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(showPosition);
        } else {
          alert("Geolocation needs to be enabled for this site.");
        }
        return "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;
      }

      function showPosition(position) {
        lat = position.coords.latitude;
        long = position.coords.longitude;
      }
</script>

字符串
我的逻辑告诉我,fetch将调用函数alertDataForUserLocation(),该函数将提供一个正确的html地址,并在末尾加上一个lat long。但这不是所显示的。下面是我得到的错误。
api.weather.gov/alerts/active?point=?,:1无法加载资源:服务器以状态400()响应

6psbrbz9

6psbrbz91#

首先更新showPosition中的lat,long是不可能更新alertDataForUserLocation中的lat,long的这不是JS中作用域的工作方式。你将不得不对你的代码进行一点重构。为了确保alertDataForUserLocation返回正确的URL,请将return语句移到showPosition中。你可以这样做:

function alertDataForUserLocation() {
var lat = "";
var long = "";
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function showPosition(position){
  lat = position.coords.latitude;
  long = position.coords.longitude;
  let url = "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;  
  return url;
  },(error)=>{console.log(error)});
} else {

  alert("Geolocation needs to be enabled for this site.");
}

字符串
}
还要检查API端点是否正确。

相关问题