Javascript 节点是否有使用/停止事件的方法?
我正在寻找一种添加事件的方法,这样它们就可以按顺序触发并可以选择通过。我想知道Node API中是否有类似的内容,或者是否有人知道一个体面的npm包可以实现这一点:Javascript 节点是否有使用/停止事件的方法?,javascript,node.js,events,eventemitter,Javascript,Node.js,Events,Eventemitter,我正在寻找一种添加事件的方法,这样它们就可以按顺序触发并可以选择通过。我想知道Node API中是否有类似的内容,或者是否有人知道一个体面的npm包可以实现这一点: obj .on('event-A', function(){ // log something() // consume or stop the event }) .on('event-A', function(){ // this never fires }); 我刚刚编写了一个库(),它
obj
.on('event-A', function(){
// log something()
// consume or stop the event
})
.on('event-A', function(){
// this never fires
});
我刚刚编写了一个库(),它复制了
EventEmitter
API,并通过拒绝承诺或调用this.stop()
提供取消。还从信号
中窃取了一个想法,您可以在其中使用“单事件”发射器。我不知道有任何节点api允许取消事件调度。但您可以使用任何与节点兼容的事件库(节点、pubsubs等)并使用以下准则修改调度函数:
- 将cancel函数作为this/first/last(选择您最喜欢的)参数传递给事件侦听器。cancel函数在闭包中有一个cancel属性,事件调度器将在分派事件之前检查该属性
- 由于这是一个副作用,这会使您的程序更难推理。您必须记住所有发生副作用的地方,才能完全理解您的程序。此外,事件处理程序必须按顺序执行,这意味着您必须具有一致的顺序定义(注册侦听器的顺序,用户定义的顺序?)李>
。时,我假设。我对node不是很熟悉,但如果没有内置的解决方案,那么事件是冻结还是密封的?如果没有,您可以添加一个已取消的属性来检查。要扩展此功能,您应该在
上更改events.EventEmitter.prototype.on,以检查是否已取消。@PaulS。--不用担心,我们都会犯错误:)不幸的是,当你触发一个事件时,没有一个“事件”被创建,所以没有什么可以依赖的。它只是通过任何争论。e、 g..trigger('a','b')
将调用处理程序('a','b')
,而不是处理程序(ev,'a','b')
或类似程序。谢谢,已经以类似方式重新编写了EventEmitter
API。是的,现在刚刚看到了您之前的消息。我还认为您正在寻找的功能类似于express.js中使用的中间件,在express.js中,您在处理程序旁边传递一个函数,处理程序必须调用该函数才能将流传输到下一个处理程序。但我想你更多的是想表示流程的结束,而不是继续。对于其他可能会对这种模式感兴趣的人,我在这里引用一个库的例子,它允许你创建自己的中间件机制:,或者ES-6(使用生成器函数)更复杂。一旦定义了中间件链,就可以将其封装在感兴趣事件的侦听器中。然后你只定义一个监听器,而不是常规方法中的几个。是的,我试图确定哪个方向更有意义(拒绝还是继续),结果是拒绝模式,因为这是承诺的工作方式。我只是在承诺的基础上把排放链分层。