带警告的Javascript设置间隔
我希望某个函数每10分钟运行一次,但我希望提前10秒警告用户此事件 所以我做了这个:带警告的Javascript设置间隔,javascript,Javascript,我希望某个函数每10分钟运行一次,但我希望提前10秒警告用户此事件 所以我做了这个: window.setInterval(function(){ alert('Warning! Refresh in 10 seconds'); window.setInterval(function(){ applyfilter(); }, 590000); }, 600000); 然而,这是行不通的。计时器不会保持“同步”。如何解决此问题?我认为您可以计算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开始将有助于勾勒出实际需要发生什么。