Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带警告的Javascript设置间隔_Javascript - Fatal编程技术网

带警告的Javascript设置间隔

带警告的Javascript设置间隔,javascript,Javascript,我希望某个函数每10分钟运行一次,但我希望提前10秒警告用户此事件 所以我做了这个: window.setInterval(function(){ alert('Warning! Refresh in 10 seconds'); window.setInterval(function(){ applyfilter(); }, 590000); }, 600000); 然而,这是行不通的。计时器不会保持“同步”。如何解决此问题?我认为您可以计算10

我希望某个函数每10分钟运行一次,但我希望提前10秒警告用户此事件

所以我做了这个:

window.setInterval(function(){

    alert('Warning! Refresh in 10 seconds');

    window.setInterval(function(){

        applyfilter();
    }, 590000);

}, 600000);

然而,这是行不通的。计时器不会保持“同步”。如何解决此问题?

我认为您可以计算10秒的间隔时间,并决定何时应用过滤器或显示消息。像

var time_start = Date.now();
var warning_done = false;
var applied_filter = false;
window.setInterval(function(){
    if (warning_done === false && Date.now() - time_start > 10*60*1000 - 10*1000){
       alert('Warning! Refresh in 10 seconds');
       warning_done = true;
    } else if (applied_filter === false && Date.now() - time_start > 10*60*1000 ){
        applyfilter();
        applied_filter = true;
    }
}, 10*1000);

我认为您可以计算10秒的间隔时间,并决定何时应用过滤器或显示消息。像

var time_start = Date.now();
var warning_done = false;
var applied_filter = false;
window.setInterval(function(){
    if (warning_done === false && Date.now() - time_start > 10*60*1000 - 10*1000){
       alert('Warning! Refresh in 10 seconds');
       warning_done = true;
    } else if (applied_filter === false && Date.now() - time_start > 10*60*1000 ){
        applyfilter();
        applied_filter = true;
    }
}, 10*1000);

它比嵌套的setInterval要简单一点。这个怎么样

var startTimer = function(){
  window.setTimeout(function(){
    applyfilter();
    startTimer();
  }, 600000);
  window.setTimeout(function(){
    alert('Warning! Refresh in 10 seconds');
  }, 590000);
};
startTimer(); //on doc load, etc

它比嵌套的setInterval要简单一点。这个怎么样

var startTimer = function(){
  window.setTimeout(function(){
    applyfilter();
    startTimer();
  }, 600000);
  window.setTimeout(function(){
    alert('Warning! Refresh in 10 seconds');
  }, 590000);
};
startTimer(); //on doc load, etc

因为JavaScript是单线程的,一旦警报框弹出,计时器就会失去同步

最好在元素中显示警告。然后可以使用
setTimeout()
,这样一次只能运行一个计时器

出于演示目的,我已将延迟更改为6s和3s:

var output=document.getElementById('output');
函数applyfilter(){
output.textContent='Filter applied!';
警告();
}
函数警告(){
setTimeout(函数(){
output.textContent='警告!3秒后刷新';
setTimeout(函数(){
applyfilter();
}, 3000);
}, 6000);
}
警告()
#输出{
背景:黄色;
}

因为JavaScript是单线程的,所以一旦弹出警报框,计时器就会失去同步

最好在元素中显示警告。然后可以使用
setTimeout()
,这样一次只能运行一个计时器

出于演示目的,我已将延迟更改为6s和3s:

var output=document.getElementById('output');
函数applyfilter(){
output.textContent='Filter applied!';
警告();
}
函数警告(){
setTimeout(函数(){
output.textContent='警告!3秒后刷新';
setTimeout(函数(){
applyfilter();
}, 3000);
}, 6000);
}
警告()
#输出{
背景:黄色;
}

在纸上绘制时间线,并在刻度上标记两个事件。这是一个基本问题,真的。查看第一个事件的延迟,查看下一个事件之前的延迟,依此类推。man:)您的代码等待10分钟,然后显示警告,然后再等待10(-10秒)分钟进行应用程序筛选。原因是,javascript是单线程的。如果你需要一个几乎精确的计时器,你必须处理实时值。如果你开始间歇,e。G每0.5秒计算一次结束时间,并在结束时间前10秒触发警告。为了澄清,内部功能直到外部功能完成才开始。直到19点50分你才会看到警报。那么,我应该让外部函数590秒,内部函数10秒?之后,它再次从0开始计数?在纸上绘制时间线,并在刻度上标记这两个事件。这是一个基本问题,真的。查看第一个事件的延迟,查看下一个事件之前的延迟,依此类推。man:)您的代码等待10分钟,然后显示警告,然后再等待10(-10秒)分钟进行应用程序筛选。原因是,javascript是单线程的。如果你需要一个几乎精确的计时器,你必须处理实时值。如果你开始间歇,e。G每0.5秒计算一次结束时间,并在结束时间前10秒触发警告。为了澄清,内部功能直到外部功能完成才开始。直到19点50分你才会看到警报。那么,我应该让外部函数590秒,内部函数10秒?在那之后,它又从0开始计数?很明显,你可以把两个内部设置超时链接起来,但我认为看到它们每次都从0开始会有助于勾勒出实际需要发生什么。很明显,你可以把两个内部设置超时链接起来,但我认为看到它们每次都从0开始将有助于勾勒出实际需要发生什么。