我正在使用JavaScript的watchPosition()和clearWatch(),它们主要根据需要运行 - watchPosition()
监视用户的位置,clearWatch()
停止该过程。但是,我发现如果我在clearWatch()
之前调用watchPosition()
已返回一个值(当它仍在尝试从其设备获取用户的位置但尚未返回success
或{{ 1}}),error
继续运行,直到它返回带有超时错误的watchPosition()
回调。我不希望这种情况发生,但我只想彻底杀死这个过程 - 有什么办法可以解决这个问题吗?
以下是我的相关代码:
error
如果我点击let userLocation,
isWatching = false
const clearWatch = (userLocation) => {
return window.navigator.geolocation.clearWatch(userLocation)
},
success = (position) => {
const latitude = position.coords.latitude,
longitude = position.coords.longitude,
accuracy = position.coords.accuracy
console.log(latitude, longitude, accuracy)
},
error = (err) => {
isWatching = false
return alert(`Error ${err.code}: ${err.message}`)
},
watch = () => {
userLocation = navigator.geolocation.watchPosition(success, error, {
"maximumAge": 0,
"timeout": 15000,
"enableHighAccuracy": true
})
}
watchPositionButton.addEventListener("click", () => {
if (isWatching) {
isWatching = false
clearWatch(userLocation)
} else {
isWatching = true
watch()
}
})
,通常需要大约5秒才能获得watchPositionButton
回调,如果我再次单击该按钮,则会将所有内容都撕下来,完美无缺。但是,如果在函数返回success
之前的时间窗口中发生第二次取消单击,则在15秒后返回错误条件并获得超时警报。那是为什么呢?我能做些什么呢?理想情况下,调用success
只会终止整个过程,但似乎默认为clearWatch()
回调。