nodejs使用callback和事件

我是nodejs编程的新手。 所以请耐心等待

我有两个nodejs模块。 一次传递消息到另一个nodejs模块。 第二个处理它并将结果传递回第一个模块。

方法1

第一个模块

: secondModule.callFunction(message, function(data){ //deal with the return message from the second module }) : 

第二个模块

 : function callfunction(message, callback){ //asynchornous functions for processing callback(data); } : 

方法2

同样的事情,但在第二个模块中使用事件发射器完成

第一个模块

 : secondModule.callFunction(message){ }) secondModule.on('done_event', function(data){ //deal with the reply }); : 

第二个模块(使用事件发射器)

  : function callFunction(message){ //asynchornous functions for processing self.emit('done_event', data); } : 

他们都是对的吗? 这些东西有什么区别(都是asynchronous的)还是我做了一些愚蠢的事情。

提前致谢

简单的callback和EventEmitter事件之间的区别 (这是节点的发布者 – 用户模式的实现)

  • 您可以将多个侦听器附加到相同的事件。 callback是一对一的通知,事件 – 一对多。
  • 你不能从事件返回值。 事件是单向消息。
  • 通常,callback会遵循(error,data1,data2,data3,…)签名,因为单个callback负责正常的结束错误数据stream(而asynchronous库通常会期望这种行为)
  • 另一方面,基于EventEmitter的api倾向于分离错误和非错误消息
  • 事件发生器中的“error”事件是特殊的:如果没有侦听器,EventEmitter会抛出一个exception。 有了callback,你有责任检查第一个错误参数。

在你的例子中两种方法都是有效的。

我对事件的理解是,当你想要“分解”你的处理,或者你不知道什么时候发生的事情的时候,会使用事件。 所以如果你的callFunction是一个长时间运行的任务(例如,为IO执行或者等待很多),你可以把它分解成几部分,例如在处理时提交data事件,然后完成事件。 但是,如果它只是一个“正常”的函数调用,我会简单地使用callback。