一段时间以来,我一直觉得这就像黑魔法一样,我希望你们中的一个能帮我弄清楚。我在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);
});
};
,在async函数中调用:
let position = await getPosition();
我已经确定了两种承诺永远不会解决的情况,即使设置了超时,也可以预测。
- 浏览器在iOS或MacOS中更新,新的隐私设置撤销位置访问。
- 在iOS设备上从safari或chrome的链接打开
getPosition()
函数将无限期挂起,或远远超过提示用户之前的超时时间。
是我在代码中遗漏了一些东西,还是这是特定于Apple操作系统的新隐私设置,其中地理定位API正在下降?
如果你看这里,你会看到我的匹配观察:-
const TIMEOUT_IS_USELESS
= Number.POSITIVE_INFINITY;
和
trackerId = navigator.geolocation.watchPosition(filterLocation, locError, {
enableHighAccuracy: accurate,
maximumAge: maxLocAge,
timeout: TIMEOUT_IS_USELESS
});