Выполнение тайм-аута до определенной задержки
Скажем, у меня есть следующий код JavaScript (в глобальном контексте):
var t = setTimeout(f, a); // f is an arbitrary function, a an arbitrary timeout
Теперь можно отменить установленное время ожидания:
clearTimeout(t);
Но возможно ли также выполнить тайм-аут до его срабатывания?
Например:
var func = getFunctionFromTimeout(t); // Does a function like this exists?
clearTimeout(t);
func();
или же
executeAndClearTimeout(t); // Does this one?
3 ответа
Я не думаю, что такая функция существует... но вы уже экономите t
почему бы не сохранить f
также?
На стороне сервера, 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, очистить Timeout и вызвать _onTimeout --- но, как я уже сказал, может однажды сломаться.
Кроме того, тайм-ауты nodeJS не всегда запускаются, когда они должны, но могут быть выровнены по вашей сетке CPUHZ... если вы используете Linux с частотой 100 Гц, вы получаете разрешение 10 мс. Я видел, как они стреляли рано или поздно, по сравнению с таймерами, предоставленными hrtime.
Нет, это невозможно.
Тем не менее, вы можете написать обертку для setTimeout
а также clearTimeout
добиться такого поведения.