定期更新 Javascript 定时器间隔

Update Javascript Timer Interval periodically

我正在创建一个 javascript 函数来显示 运行ning 任务的状态 [每 1 小时 运行 并且需要一些时间才能完成] 此功能将让最终用户知道任务当前是否 运行ning 或未

为了在加载事件中执行此操作,我创建了一个函数并为此设置了 10 分钟的间隔,因此它会每隔 10 分钟告诉用户任务的状态

如果任务在服务器上被发现为 运行ning,我想将间隔减少到 1 分钟。因此,一旦任务完成,用户就会有一个想法,他们可以重新开始使用 Web 门户。 一旦检测到它不是 运行ning 想再次将间隔恢复到原来的 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****
                    }                       
                }
        }) 
    }

您可以根据 id 使用 clearInterval

let id = setInterval(function () {
 // Invoke function every 10 minutes (600000)
  loadSyncStatus();
}, 600000);

if(response.running_flag=true){
  clearInterval(id);
  id = setInterval(loadSyncStatus, 60000);
}
else{
  clearInterval(id);
  id = setInterval(loadSyncStatus, 600000);
}   

请试试这个 它会在 600000

之后调用 loadSyncStatus()
var myTimeOut=0;
    $(function () {     
            loadSyncStatus();
         myTimeOut = setTimeout(loadSyncStatus, 600000);
        });

function loadSyncStatus() {
    clearTimeout(myTimeOut);
    myTimeOut = setTimeout(loadSyncStatus, 600000);
    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****
                }                       
            }
    }) 
}