2014-12-02 68 views
1

我想知道是否使用事件在ExpressJS内的函数之间进行通信是一个好习惯?如果是,我怎么能发送我的发射事件的参数?如何通过Node JS使用事件?

+0

什么是“功能之间的沟通”是什么意思? – 2014-12-02 18:00:29

+0

大多数JavaScript实现都基于事件循环(nodejs特别基于事件循环) - 所以使用事件绝对是一些任务的良好实践 - 您可以更具体一些并提供代码示例。 – Soren 2014-12-02 18:01:39

+0

不幸的是我不能提供I代码示例。但我可以更多地解释我的想法。我正在考虑使用事件的原因是这样的。当用户连接到我的应用程序时,必须触发一个事件。此事件包含用户信息(id,名称和其他凭证)。该事件将调用在用户重定向到其主页时在后台运行的功能。 – user2422940 2014-12-03 08:50:59

回答

4

这取决于。如果你在功能之间有真正的异步通信,那么事件是需要考虑的事情。 “真正”意味着调用函数的执行线程被setInterval,nextTick或syncIO中断(仅使用回调不一定是异步)。如果不是这种情况,则不能使用事件,因为它们将在您的调用函数可以设置侦听器之前发出。

事件在被调用的函数中需要更多的工作 - 您需要创建一个EventEmitter实例并将其传回,在这个实例上,被调用者将设置侦听器。然后你的被调用函数发出事件。

如果你的函数之间的关系是一对一的(请求/回复),并且结果是成功/失败,那么比回调更容易。

如果你的异步调用函数可以多次发射事件或者有多个结果,那么事件就非常适合。

至于参数,请看文档:http://nodejs.org/api/events.html

emitter.emit(event, [arg1], [arg2], [...]) 
+0

谢谢你的解释。它确实使事情更加清晰。现在最后一个问题仍然存在。事件发射器对象可以是唯一的(例如全局变量),或者每次我想发出事件时都可以创建一个。 – user2422940 2014-12-03 08:54:43

+0

每次您想要发出事件时,都不需要创建EventEmitter的新实例。您可以传递对象并在代码的任何部分发出事件。 EventEmitter是一个调解函数之间通信的对象 - 事件可以在任何地方被监听和发送。 – YuraA 2014-12-03 15:33:41