在我看来,“核心”node.js 回调语法,即
function foo(data, callback) {
callback(false, data2);
}
在语义上被事件取代,除了
- 有了事件,你就失去了最后一点静态检查
- 事件更灵活
- 一旦你有超过 2 或 3 个回调函数,回调就会变得相当笨拙
- 事件可能是非常轻微的性能开销(但在几乎所有情况下过早优化都是轻描淡写)
- (不过话又说回来,你也必须记住这些事件......)
那么什么时候使用什么才是好的策略呢?
最佳答案
一个好的策略是使用最适合您的用例的抽象模型
我认为在这种情况下性能不是问题。
如果您向执行异步调用的客户端提供函数,将其作为单个函数公开(如您的示例)似乎是完全有效的,而且看起来非常干净。 (这似乎是大多数 node.js 数据库客户端的工作方式)。
正如您提到的,当回调超过 2-3 时,回调很快就会失控。但是将 2-3 回调函数建模为事件发射器会更好吗?也许吧,这取决于你。
IMO 2-3+ 回调肯定会使用 promises 更好地建模,因为调用结构会更扁平。
IMO 事件发射器通常用于站立时间较长的物体。存活时间“更长”的对象。您想创建一个对象并订阅一段时间内的事件,这似乎是一个与公开回调的单个异步函数完全不同的用例。
另一种选择是将您的客户端建模为流。
我认为一个好的经验法则是查看 Node 标准库(和流行的 Node 库)在何处将事件发射器应用于客户端,以及在何处为客户端提供基于回调的 API。
Node 将其 tcp 客户端/服务器建模为事件发射器
关于javascript - 在 node.js 中,什么时候使用事件,什么时候使用直接回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34877804/