javascript setInterval错误检查

时间:2017-04-10 22:22:41

标签: javascript tizen-web-app

我的问题与tizen和装备S2有关。我正在从API中拉出天气,我每隔15分钟就会尝试一次。但是,某些东西正在破坏,我无法访问控制台日志。我的猜测是它与屏幕处于活动状态和非活动状态时有关。从互联网浏览器尝试时,它可以正常工作。

var weatherVar = setInterval(runWeather, 900000);

function runWeather() {
    getLocation();
}

function getLocation() {
    if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
    } 
    else { 
        alert("Geolocation is not supported by this browser.");
    }
}

function showPosition(position) {
    var geoLat = position.coords.latitude,
        geoLong = position.coords.longitude,
        key = "my API key",
        WeatherURL = "http://api.wunderground.com/api/" + key + 
        "/conditions/q/" + geoLat + "," + geoLong + ".json";


    $.ajax({  
        url : WeatherURL,
        dataType : "jsonp",
        success : function(parsed_json) {
        var tempF = parsed_json['current_observation']['temp_f'];
        var weatherDescription = parsed_json['current_observation']['icon'];

        document.getElementById("currentTemp").innerHTML = tempF + '°';
        document.getElementById("condition").innerHTML = weatherDescription;
        }
    });
}

编辑,我最初因为某些原因发布了这些变量时更改了一些变量。这些已经修复,与所描述的问题无关。

我尝试过的另一种方法是将当前时间与从天气预报中提取的时间戳进行比较。不过,我的时间每半秒更新一次,所以在启动通话和生成天气预报之间的滞后时间内,我正在对地下天气进行一百次的ping操作。为了解决这个问题,我创建了一个变量,并在启动调用时将其赋值为-1。然后,当返回天气报告时,它会将该值更改为基于天气时间戳的数字。这也有问题,我尝试创建一个错误检查,包括在变量更改为-1时创建的第二个计时器。它会等一下,看看它是否仍为-1,如果是,它会尝试再次运行getLocation。不过,这让我再次对WU进行了多次打击。有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

与Chrome一样,当屏幕处于非活动状态时,setInterval计时器会大幅减速。问题是我的错误检查还依赖于设置了相对较长间隔的间隔计时器。由于为时间显示供电的定时器设置为500ms,我使用该定时器将当前时间与天气报告生成的时间戳进行比较。当它抽出天气数据的时候,我已经添加了一个计数器来增加每个间隔。如果在生成x个计数器之前天气时间戳没有用新号码更新,那么它将尝试再次提取数据。