JavaScript - clearWatch()不取消watchPosition(),只是默认为错误回调

时间:2017-09-28 14:09:21

标签: javascript geolocation

我正在使用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()回调。

0 个答案:

没有答案