Zag*_*ine 9 javascript node.js eventemitter
我读了很多关于的事情EventEmitter.但我不知道在哪种情况下我需要在我的Node.js应用程序中使用它.
小智 24
每当代码对某些东西进行SUBSCRIBE而不是从某些东西获得回调时是有意义的.典型的用例是应用程序中存在多个代码块,可能需要在事件发生时执行某些操作.
例如,假设您正在创建一个票务系统.处理事情的常用方法可能是这样的:
function addTicket(ticket, callback) {
insertTicketIntoDatabase(ticket, function(err) {
if (err)
return handleError(err);
callback();
});
}
Run Code Online (Sandbox Code Playgroud)
但是现在,有人决定在将数据库插入数据库时,您应该通过电子邮件发送给用户,让他们知道.没关系,你可以把它添加到回调中:
function addTicket(ticket, callback) {
insertTicketIntoDatabase(ticket, function(err) {
if (err)
return handleError(err);
emailUser(ticket, callback);
});
}
Run Code Online (Sandbox Code Playgroud)
但现在,有人还希望通知另一个系统已插入故障单.随着时间的推移,插入故障单时可能会发生任何事情.所以让我们改变一下:
function addTicket(ticket, callback) {
insertTicketIntoDatabase(ticket, function(err) {
if (err)
return handleError(err);
TicketEvent.emit('inserted', ticket);
callback();
});
}
Run Code Online (Sandbox Code Playgroud)
在通知用户界面之前,我们不再需要等待所有这些功能完成.在代码的其他地方,您可以轻松添加这些功能:
TicketEvent.on('inserted', function(ticket) {
emailUser(ticket);
});
TicketEvent.on('inserted', function(ticket) {
notifySlack(ticket);
});
Run Code Online (Sandbox Code Playgroud)
当同一事件可能发生多次或可能根本不发生时,应使用 EventEmitter。事实上,无论操作成功与否,回调都应该被调用一次。回拨意味着当你准备好时给我打电话
使用回调的 API 只能通知一个特定的回调,而使用 EventEmitter 则允许我们为同一事件注册多个侦听器。
如果需要通知用户状态更改,请使用事件发射器。
出于测试目的,如果您想确保在函数内部调用函数,请发出一个事件。
| 归档时间: |
|
| 查看次数: |
1802 次 |
| 最近记录: |