【发布时间】:2020-11-26 18:28:51
【问题描述】:
我正在创建一个 javascript 函数来显示正在运行的任务的状态 [它将每 1 小时运行一次,完成需要一些时间] 此功能将让最终用户知道任务当前是否正在运行
为了在加载事件上执行此操作,我创建了一个函数并为此设置了 10 分钟的间隔,因此每 10 分钟它会告诉用户任务的状态
如果发现任务在服务器上运行,我想将间隔减少到 1 分钟。所以一旦任务完成,用户就会得到一个想法,他们可以使用门户网站重新启动。 一旦检测到它没有运行,就想再次将间隔恢复到原来的 10 分钟。
目前的实现如下
$(function () {
loadSyncStatus();
setInterval(function () {
// Invoke function every 10 minutes (600000)
loadSyncStatus();
}, 600000);
});
function loadSyncStatus() {
var action_url = '@Url.Content("~/Controller/GetSyncStatus")';
$.ajax({
url: action_url,
type: 'GET',
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (response) {
$("#dataSyncStatus").html(response.message);
if(response.running_flag=true){
//check the status every 1 minute *****TODO****
}
else{
//reset the interval back to 10 minutes *****TODO****
}
}
})
}
【问题讨论】:
-
一个运行区间的延迟是不能改变的,你必须清除原来的区间,然后用一个新的延迟值开始一个新的区间。
-
第一个问题是你扔掉了
setInterval()返回的东西。那将是您可以用来关闭计时器的 ID。以目前的形式,它会永远运行,很难想象你对此有多满意。