0

在 node.js 中有很多发送和监听事件。

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

一般来说,哪种方法是正确的(最好的)方法?

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

4

2 回答 2

3

这是一篇很棒的文章,它解释了 nextTick() 并给出了为什么通常应该在 nextTick() 中发出事件的一些充分理由。

于 2014-04-08T19:27:58.147 回答
3

通常在节点 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 的缓存结果。

于 2014-04-08T19:23:22.983 回答