Выполнение тайм-аута до определенной задержки - PullRequest
2 голосов
/ 18 августа 2011

Скажите, у меня есть следующий код 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 ]

2 голосов
/ 18 августа 2011

На стороне сервера, 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.

1 голос
/ 18 августа 2011

Я не думаю, что такая функция существует ... но вы уже сохраняете t, почему бы не сохранить f также?

0 голосов
/ 18 августа 2011

Нет, это невозможно.

Однако вы можете написать оболочку для setTimeout и clearTimeout, чтобы добиться такого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...