在node.js中,何时使用事件,何时使用直接回调函数?

时间:2016-01-19 13:15:18

标签: javascript node.js events callback

在我看来,"核心" node.js回调语法,即

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

之外,

在语义上被事件取代

  • 对于事件,您将失去最后一点静态检查
  • 活动更灵活
  • 一旦你有超过2或3个回调函数,回调变得相当笨重
  • 事件可能是一个非常轻微的性能开销(但过早的优化几乎在所有情况下都是轻描淡写的)
  • (但话又说回来,你也必须记住这些事件......)

那么什么时候使用什么是一个好政策?

1 个答案:

答案 0 :(得分:2)

一个好的策略是使用任何抽象最佳模型用例

我认为在这种情况下,表演不是问题。

如果要为执行异步调用的客户端提供函数,将其作为单个函数(如您的示例)公开似乎是完全有效的,并且看起来非常干净。 (这似乎是大多数node.js数据库客户端工作的方式。)

当你提到超过2-3时,回调很快就会失控。但是2-3回调函数会更好地建模为事件发射器吗?也许吧,这取决于你。

IMO 2-3 +回调肯定会更好地使用promises建模,因为调用结构会更平坦。

IMO事件发射器通常用于较长时间的物体。对于一个更长的"持续时间。您希望在一段时间内创建对象并订阅事件的位置,这似乎是一个完全不同的用例,而不是暴露回调的单个异步函数。

另一个选择是将客户端建模为流。

我认为一个好的经验法则是查看节点标准库(和流行节点库)将事件发射器应用于客户端的位置,以及它向客户端提供基于回调的api的位置。

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