是使用process.nextTick发出事件而不是排队吗?

时间:2014-04-08 18:58:01

标签: node.js eventemitter

node.js中有大量的事件发生和侦听。

我试图决定是否应该内联发出事件然后从函数返回,或者我是否应该使用process.nextTick发出导致它们稍后运行的事件。

一般来说,这是最好的(最好)方法吗?

有人告诉我,node.js内置的模块大多使用process.nextTick。

2 个答案:

答案 0 :(得分:3)

通常在节点v0.10和更新版本中,您应该使用setImmediate。我在博文setTimeout and friends中涵盖了所有各种选项。使用事件发射器需要注意的要点是,在开始发出事件之前,您需要允许调用者至少一个tick来绑定其事件侦听器。这种模式通常被认为是正常的,应该得到支持:

var myThing = new Thing();
//if myThing immediately emits events,
// they will be missed because they aren't bound yet
myThing.on('event', handleEvent);
//If events are delayed at least one tick, all is well,
// the listener is bound and all events are handled

对于早于v0.10的节点,应使用process.nextTick

请注意,如果您的发射器逻辑自然需要异步调用(因为它执行I / O),则您不需要setImmediate因为I / O已经允许事件循环完成勾选。在有时需要进行I / O的情况下,您只需要setImmediate,但在这种情况下,您不需要它,例如,您有来自先前I / O的缓存结果。

答案 1 :(得分:3)

This is a great article解释了nextTick(),并提供了一些很好的理由,说明为什么事件通常应该在nextTick()中发出。