有没有办法暂停获取直到获得地理位置?
Posted
技术标签:
【中文标题】有没有办法暂停获取直到获得地理位置?【英文标题】: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 ()
【问题讨论】:
【参考方案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 端点是否正确。
【讨论】:
谢谢。这太棒了!以上是关于有没有办法暂停获取直到获得地理位置?的主要内容,如果未能解决你的问题,请参考以下文章