在定义的延迟之前执行超时

时间:2011-08-18 11:08:39

标签: javascript timeout

假设我有以下JavaScript代码(在全局范围内):

var t = setTimeout(f, a); // f is an arbitrary function, a an arbitrary timeout

现在可以取消设置超时:

clearTimeout(t);

但也可以在正常触发之前执行超时吗?

E.g:

var func = getFunctionFromTimeout(t); // Does a function like this exists?
clearTimeout(t);
func();

executeAndClearTimeout(t); // Does this one?

3 个答案:

答案 0 :(得分:2)

在服务器端,node.js setTimeout提供的对象多于id。我认为这是无证件的领域。

当然,使用这些内部结构可能会有危险,因为它们可能会随着节点的发展而发生变化。

node
> function x(){ console.log("hello"); }
> z = setTimeout(x,100000)
{ _idleTimeout: 100000,
  _onTimeout: [Function: x],
  _idlePrev: 
   { repeat: 100,
     _idleNext: [Circular],
     _idlePrev: [Circular],
     callback: [Function] },
  _idleNext: 
   { repeat: 100,
     _idleNext: [Circular],
     _idlePrev: [Circular],
     callback: [Function] },
  _idleStart: Thu, 18 Aug 2011 11:11:48 GMT }
> 

看起来你可以保存z._onTimeout,清除超时,然后调用_onTimeout ---但正如我所说,有一天可能会中断。

此外,nodeJS超时并不总是在应该的时候触发,但是可以与你的CPUHZ网格对齐....如果你用100hz运行linux,你得到10ms的分辨率。我和他们提供的早期或晚期的火灾相比,都是由于时间的推移。

答案 1 :(得分:1)

我认为这样的功能不存在......但你已经全部保存t,为什么不保存f

答案 2 :(得分:0)

不,那是不可能的。

但是,您可以为setTimeoutclearTimeout编写一个包装器来实现此类行为。