node.js中有大量的事件发生和侦听。
我试图决定是否应该内联发出事件然后从函数返回,或者我是否应该使用process.nextTick发出导致它们稍后运行的事件。
一般来说,这是最好的(最好)方法吗?
有人告诉我,node.js内置的模块大多使用process.nextTick。
答案 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()中发出。