【问题标题】:Add milliseconds to timeout添加毫秒超时
【发布时间】:2017-09-06 15:42:02
【问题描述】:

我在 JavaScript 中创建了一个如下所示的超时:

var milliseconds = 3000;
var timer = setTimeout(function() { console.log('done!'); }, milliseconds);

此计时器运行 3 秒。但是,有时,我想再增加一分钟。我的挑战是,有时,计时器已经开始了。例如,在调用函数之前,计时器可能还剩 1 分 45 秒。但是,我想添加一分钟,以便在 2 分 45 秒内调用超时函数。

有没有办法在 JavaScript 中为超时添加毫秒。我没有看到允许这样做的函数。

【问题讨论】:

  • 不,没有办法为已经执行的超时增加时间。您必须取消超时并运行一个新的超时,剩余时间加上添加的时间。
  • 其实那个定时器的延迟是3秒
  • 这可能会有所帮助stackoverflow.com/questions/6844993/…

标签: javascript


【解决方案1】:
class Timer {
 constructor(func){
   this.func = func;
   this.timers = [];
 }
 start(time){
   setTimeout(_=>this.check(),time);
 }
 add(time){
   this.timers.push(time);
 }
 check(){
   if(!this.timers.length) return this.func();
   this.start(this.timers.shift());
 }
}

可以这样使用:

var t = new Timer(_=>alert("hi"));
t.start(1000);
t.add(3000);

基本上这实现了一个计时器队列。添加时间量不会更改计时器,但会将时间添加到队列中。如果一个定时器完成,它只在没有剩余定时器的情况下执行该函数,如果有,它会继续执行。

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2017-04-15
    • 2013-06-22
    相关资源
    最近更新 更多