浏览器地理位置 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 错误)

一种设置python函数执行超时时间 | 函数超时后不抛出异常的方法

地理位置API不适用于移动设备

PhoneGap 地理位置超时错误

不抛出的方法的快速错误处理[重复]

停止不抛出异常Android的线程