在node.js中,何时使用事件,何时使用直线callback函数?

在我看来,“核心”node.jscallback语法,即

function foo(data, callback) { callback(false, data2); } 

在语义上被事件所取代,除此之外

  • 随着事件,你失去了静态检查的最后一点
  • 活动更灵活
  • 一旦你有超过2或3个callback函数,callback变得相当笨拙
  • 事件可能是一个非常轻微的性能开销(但过早的优化在几乎所有情况下都是轻描淡写)
  • (但是再一次,你也必须记住事件…)

那么什么时候使用什么是一个好的策略呢?

一个好的策略是使用任何抽象模型来最好地模拟你的用例

在这种情况下,我认为业绩不成问题。

如果你正在向一个执行asynchronous调用的客户端提供一个函数,把它作为一个单独的函数暴露(就像你的例子)似乎是完全有效的,而且看起来很干净。 (这似乎是大多数node.js数据库客户端工作的方式)。

正如你所提到的那样,当超过2-3的时候,callback很快就会失控。 但是2-3callback函数可以更好地模拟为事件发射器? 也许,这取决于你。

国际海事组织2-3 +callback肯定会更好地使用承诺build模,因为呼叫结构会更平坦。

IMO事件发射器通常用于较长的站立物体。 活动持续时间较长的对象。 你想在哪里创build一个对象,并在一段时间内订阅事件,这似乎是一个完全不同的用例,而不是一个暴露callback的asynchronous函数。

另一种select是将您的客户端build模为stream。

我认为一个好的经验法则是查看节点标准库(和常用节点libararies)在哪里向客户端应用事件发送器,以及为客户端提供基于api的callback。

节点将其tcp客户端/服务器build模为事件发射器