我读了很多关于EventEmitter
的内容。但我不知道在哪种情况下我需要在我的Node.js应用程序中使用它。
答案 0 :(得分:19)
每当代码对SUBSCRIBE有意义而不是从某些东西获得回调时。典型的用例是应用程序中存在多个代码块,可能需要在事件发生时执行某些操作。
例如,假设您正在创建一个票务系统。处理事情的常用方法可能是这样的:
function addTicket(ticket, callback) {
insertTicketIntoDatabase(ticket, function(err) {
if (err)
return handleError(err);
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();
});
}
在通知用户界面之前,我们不再需要等待所有这些功能完成。在代码的其他地方,您可以轻松添加这些功能:
TicketEvent.on('inserted', function(ticket) {
emailUser(ticket);
});
TicketEvent.on('inserted', function(ticket) {
notifySlack(ticket);
});