javascript setInterval 错误检查
javascript setInterval error checks
我的问题更多地与 tizen 和 gear S2 有关。我正在从 API 中获取天气信息,并且尝试每 15 分钟执行一次。但是,某处出现问题,我无权访问控制台日志。我猜这与屏幕处于活动状态还是非活动状态有关。从 Internet 浏览器尝试时它工作正常。
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;
}
});
}
编辑,出于某种原因,我最初在发布时更改了一些变量。这些问题已得到修复,与所描述的问题无关。
我尝试过的另一种方法是将当前时间与从天气预报中提取的时间戳进行比较。不过,我的时间每半秒更新一次,所以在发起呼叫和生成天气报告之间的延迟时间内,我对 Weather Underground 进行了一百次 ping 操作。为了解决这个问题,我创建了一个变量,并在启动调用时为其分配了一个值 -1。然后,当返回天气报告时,它会将该值更改为基于天气时间戳的数字。不过,这也有问题,我尝试创建一个错误检查,其中涉及在变量更改为 -1 时创建的第二个计时器。它会等一分钟,看看它是否仍然是 -1,如果是,它会再次尝试 运行 getLocation。不过,这导致我再次多次 ping WU。有什么想法吗?谢谢!
与 Chrome 一样,当屏幕处于非活动状态时,setInterval 计时器会显着减慢。问题是我的错误检查还依赖于设置了相对较长间隔的间隔计时器。由于为时间显示供电的计时器设置为 500 毫秒,我使用该计时器将当前时间与天气报告生成的时间戳进行比较。当需要提取天气数据时,我添加了一个计数器来增加每个间隔。如果在生成 x 个计数器之前天气时间戳没有更新为新数字,那么它将再次尝试提取数据。
我的问题更多地与 tizen 和 gear S2 有关。我正在从 API 中获取天气信息,并且尝试每 15 分钟执行一次。但是,某处出现问题,我无权访问控制台日志。我猜这与屏幕处于活动状态还是非活动状态有关。从 Internet 浏览器尝试时它工作正常。
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;
}
});
}
编辑,出于某种原因,我最初在发布时更改了一些变量。这些问题已得到修复,与所描述的问题无关。
我尝试过的另一种方法是将当前时间与从天气预报中提取的时间戳进行比较。不过,我的时间每半秒更新一次,所以在发起呼叫和生成天气报告之间的延迟时间内,我对 Weather Underground 进行了一百次 ping 操作。为了解决这个问题,我创建了一个变量,并在启动调用时为其分配了一个值 -1。然后,当返回天气报告时,它会将该值更改为基于天气时间戳的数字。不过,这也有问题,我尝试创建一个错误检查,其中涉及在变量更改为 -1 时创建的第二个计时器。它会等一分钟,看看它是否仍然是 -1,如果是,它会再次尝试 运行 getLocation。不过,这导致我再次多次 ping WU。有什么想法吗?谢谢!
与 Chrome 一样,当屏幕处于非活动状态时,setInterval 计时器会显着减慢。问题是我的错误检查还依赖于设置了相对较长间隔的间隔计时器。由于为时间显示供电的计时器设置为 500 毫秒,我使用该计时器将当前时间与天气报告生成的时间戳进行比较。当需要提取天气数据时,我添加了一个计数器来增加每个间隔。如果在生成 x 个计数器之前天气时间戳没有更新为新数字,那么它将再次尝试提取数据。