浏览器地理位置 API 不抛出错误或遵守超时
Posted
技术标签:
【中文标题】浏览器地理位置 API 不抛出错误或遵守超时【英文标题】:Browser Geolocation API not throwing error or respecting timeout 【发布时间】:2021-01-28 23:33:57 【问题描述】:一段时间以来,这对我来说就像是黑魔法,我希望你们中的某个人能帮助解决这个问题。我在 JS 中有一个地理定位功能,如下所示:
// User Position
export function getPosition(options)
return new Promise(function (resolve, reject)
function success(pos)
var crd = pos.coords;
console.log('we have succeeded with ' + crd)
resolve(pos);
function failure(err)
console.warn(`ERROR($err.code): $err.message`);
reject();
var options =
enableHighAccuracy: true,
timeout: 5500,
maximumAge: 6000
;
// debugger;
navigator.geolocation.getCurrentPosition(success, failure, options);
);
;
它在异步函数中调用:
let position = await getPosition();
我已经确定了两种承诺永远不会解决的情况,即使设置了超时也是可以预见的。
浏览器已在 ios 或 MacOS 中更新,新的隐私设置撤销了位置访问权限。 从 Safari 或 iOS 设备上的 chrome 中的链接打开getPosition()
函数将无限期挂起,或者远远超过提示用户之前的超时时间。
我的代码中是否遗漏了某些内容,或者这是否特定于 Apple 操作系统的新隐私设置,其中地理定位 API 落在了它的脸上?
【问题讨论】:
【参考方案1】:如果您查看here,您会看到我的匹配观察结果:-
const TIMEOUT_IS_USELESS
= Number.POSITIVE_INFINITY;
和
trackerId = navigator.geolocation.watchPosition(filterLocation, locError,
enableHighAccuracy: accurate,
maximumAge: maxLocAge,
timeout: TIMEOUT_IS_USELESS
);
【讨论】:
所以放弃所有超时的希望并找到另一种解决方法吧? 我进行了健全性检查等(见代码)我有一个 MAX_SILENCE MAX_LOITER 等以上是关于浏览器地理位置 API 不抛出错误或遵守超时的主要内容,如果未能解决你的问题,请参考以下文章
如何处理不抛出 catch 的 API 请求? (403 错误)