什么时候应该使用EventEmitter?

我读了很多关于EventEmitter的东西。 但我不知道在哪种情况下,我需要在我的Node.js应用程序中使用它。

每当代码有意义的时候SUBSCRIBE的东西,而不是从某个东西得到一个callback。 典型的用例是应用程序中有多个代码块,当事件发生时可能需要做某些事情。

例如,假设您正在创build票务系统。 处理事情的常见方式可能是这样的:

 function addTicket(ticket, callback) { insertTicketIntoDatabase(ticket, function(err) { if (err) return handleError(err); callback(); }); } 

但现在有人已经决定,当一张票插入数据库时​​,你应该通过电子邮件发送给用户让他们知道。 没关系,您可以将其添加到callback中:

 function addTicket(ticket, callback) { insertTicketIntoDatabase(ticket, function(err) { if (err) return handleError(err); emailUser(ticket, callback); }); } 

但是现在,有人想要通知另一个系统已经插入了票证。 随着时间的推移,插入票证时可能会发生许多事情。 所以让我们稍微改变一下:

 function addTicket(ticket, callback) { insertTicketIntoDatabase(ticket, function(err) { if (err) return handleError(err); TicketEvent.emit('inserted', ticket); callback(); }); } 

在我们通知用户界面之前,我们不再需要等待所有这些function的完成。 在你的代码中的其他地方,你可以轻松地添加这些函数:

 TicketEvent.on('inserted', function(ticket) { emailUser(ticket); }); TicketEvent.on('inserted', function(ticket) { notifySlack(ticket); });