【问题标题】:Is there a way to pause fetch until geolocation is obtained?有没有办法暂停获取直到获得地理位置?
【发布时间】:2019-04-26 07:54:33
【问题描述】:

我正在使用 National Weather Service Alert API,它可以根据位置提供天气警报。很整洁的东西。我想缩小信息范围,只根据用户的地理位置进行拉取,这是一个可行的选择,并通过输入 html 地址并以 lat long 结束手动测试。我试图通过获取它们的位置并将其添加到返回并在 fetch 行中使用的字符串来自动化 html 构建过程。当我运行它时,控制台显示地址缺少经纬度。

除此之外我没有尝试太多,因为我真的不知道另一种方法可以做到这一点。

函数 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;
  }

我的逻辑告诉我 fetch 将调用函数 alertDataForUserLocation() ,该函数将提供一个正确的 html 地址,最后有一个 lat long。这不是显示的内容。以下是我得到的错误。

api.weather.gov/alerts/active?point=?,:1 加载资源失败:服务器响应状态为 400 ()

【问题讨论】:

    标签: javascript api geolocation fetch nws


    【解决方案1】:

    首先在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 端点是否正确。

    【讨论】:

    • 谢谢。这太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多