JavaScript - clearWatch() 不会在 setTimeout() 上触发

标签 javascript

我在使用 JavaScript 的 watchPosition 和 clearWatch 函数时遇到了一些我不太了解的问题,如果有人能提供帮助,我将不胜感激。

首先,有问题的功能......

function location(x){
    var getLocation;

    var lat_input = $(x).find(".latitude");
    var lon_input = $(x).find(".longitude");
    var acc_input = $(x).find(".accuracy");

    function showPosition(position) {
        latitude = position.coords.latitude;
        longitude = position.coords.longitude;
        accuracy = position.coords.accuracy;

        $(lat_input).val(latitude);
        $(lon_input).val(longitude);
        $(acc_input).val(accuracy);

        setTimeout(function(){
            navigator.geolocation.clearWatch(getLocation);
            alert('done');
        }, 10000);  
    };

    getLocation = navigator.geolocation.watchPosition(showPosition, null, {maximumAge: 0, timeout: Infinity, enableHighAccuracy: true});
};

特别是,我的问题在于 setTimeout 部分中的代码。

当我在我的笔记本电脑上运行这个函数时,一切都开始了 - .longitude、.latitude 和 .accuracy 字段被相应地填充。 10 秒后,setTimeout 被触发——我不能说 clearWatch 是否成功运行(因为计算机 self 发现的能力非常有限),但我在这里注意到的奇怪行为是 alert('done' ) 被触发两次。

当我在我的手机(预期平台)上运行此功能时,一切都以同样好的开始,但 10 秒后,alert('done') 开始无休止地触发,有时在紧接着,有时中间有几秒钟。然而,最令人沮丧的是 clearWatch 似乎根本没有运行 - lat、long 和 accuracy 字段在 10 秒标记后不断更新。

如果有人能看出我在这里做错了什么,将不胜感激您的指导。

最佳答案

我遇到了类似的问题。我发现下面的代码并没有停止 watch :

navigator.geolocation.clearWatch(locationID);

第 1 步:创建一个变量并将其分配给 navigator.geolocation

var geoLoc = navigator.geolocation;

var geoWatchID = geoLoc.watchPosition(
                onGPSSuccess, onGPSError,
            { maximumAge: 300, timeout: 1500, enableHighAccuracy: true });

第 2 步:秒表使用 var geoloc 而不是 navigator.geolocation.clearWatch()

geoLoc.clearWatch(geoWatchID);

geoWatchID = null;

参见 http://www.tutorialspoint.com/html5/geolocation_clearwatch.htm

关于JavaScript - clearWatch() 不会在 setTimeout() 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958309/

相关文章:

javascript - 使用 mongoclient 异步访问 mongo 集合时出错

javascript - 即使用户点击 "back",也会将 PHP 变量传递给 JavaScript

javascript - 将JSON转换为 typescript 中的字符串数组

javascript - React Native Navigator - 屏幕总是空白

javascript - PHP 到 Javascript 多维数组

javascript - 如何通过前端应用程序中的 OpenTelemetry 将跟踪数据发送到 Jaeger?

javascript - Node JS动态集合ajax调用异步等待

javascript - 对象内部的方法未定义?

javascript - Sequelize连接错误: self signed certificate

javascript - 使用 JS 识别计算机已从 sleep 模式唤醒