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。