在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模为事件发射器