假设我有以下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?
答案 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)
不,那是不可能的。
但是,您可以为setTimeout
和clearTimeout
编写一个包装器来实现此类行为。