首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventEmitter排序事件

EventEmitter排序事件
EN

Stack Overflow用户
提问于 2016-04-30 22:39:55
回答 1查看 395关注 0票数 0

由于“秩序”的含义很广泛,让我解释一下我感兴趣的案例。

一个相当常见的模式(好的或坏的):

代码语言:javascript
复制
client = net.connect(...)
client.on('connect', () => {
  client.removeAllListeners('error');
  client.on('error', err => {
    ... // process IO errors
  });
  ...
});
client.on('error', err => {
  ... // process connection failures
});

根据我的理解,有可能会发出一个connect事件,然后再发出一个IO error。但是,在EventEmitter级别是否可以保证事件的处理就像一道屏障(在适当的并发编程语言中)。

例如,在本例中,我希望看到一个保证,即connect处理程序删除仅针对连接错误设置的error处理程序,以及仅针对IO错误设置的新处理程序。但是,新的事件侦听器列表只会在下一次计时中被考虑吗?我希望确保程序顺序中相互排除的处理程序(并发编程语言:"removeAllListeners“和"on('error')”按该顺序执行,因此两个处理程序不可能接收相同的事件)也在同步顺序中相互排除(并发编程语言:事件"connect“、"removeAllListeners”、"on(error)“和"IO error”是整个同步顺序的一部分)。

问题是一般的事件发射器,而不是连接处理的工作方式,因为在其他地方也可以看到类似的模式-例如,相同的连接重用来处理不同的事务,并且需要在单个事务的持续时间内绑定error处理程序,但不能重叠处理程序,或者在事务继续进行后处理事件。

EventEmitter中有这样的保证吗?否则,像上面这样的许多模式真的需要更具防御性的编码。

EN

回答 1

Stack Overflow用户

发布于 2016-04-30 22:58:30

没有一个EventEmitter方法会延迟到下一个滴答器或其他任何地方,它们都在被调用的时候完成所有的工作。

因此,执行client.removeAllListeners('error');操作将立即删除error事件的所有事件处理程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36956220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档