在 node.js 中有很多发送和监听事件。
我正在尝试决定是否应该内联发出事件然后从函数返回,或者我是否应该通常使用 process.nextTick 发出导致它们稍后运行的事件。
一般来说,哪种方法是正确的(最好的)方法?
有人告诉我,node.js 的内置模块大多使用 process.nextTick。
在 node.js 中有很多发送和监听事件。
我正在尝试决定是否应该内联发出事件然后从函数返回,或者我是否应该通常使用 process.nextTick 发出导致它们稍后运行的事件。
一般来说,哪种方法是正确的(最好的)方法?
有人告诉我,node.js 的内置模块大多使用 process.nextTick。
这是一篇很棒的文章,它解释了 nextTick() 并给出了为什么通常应该在 nextTick() 中发出事件的一些充分理由。
通常在节点 v0.10 及更高版本中,您应该使用setImmediate
. 我在我的博文setTimeout 和朋友中介绍了所有各种选项。使用事件发射器要注意的要点是,在开始发射事件之前,您需要至少允许调用者一个滴答声来绑定他们的事件侦听器。这种模式通常被认为是可以的并且应该被支持:
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
对于较早的节点,process.nextTick
应使用 v0.10。
请注意,如果您的发射器逻辑自然需要异步调用(因为它执行 I/O),则您不需要setImmediate
,因为执行 I/O 已经允许事件循环完成滴答声。你只需要setImmediate
在你有时需要做 I/O 但在这种情况下你不需要它的情况下,例如,你有一个来自先前 I/O 的缓存结果。