节点是否有一种方式来消费/停止事件?

Does node have a way to consume/stop an event?

本文关键字:事件 方式 是否 一种 节点      更新时间:2023-09-26

我正在寻找一种方法来添加事件,使它们依次触发和可选通过。我想知道在Node API中是否有类似的东西,或者如果没有,如果有人知道一个体面的npm包来完成这个:

obj
  .on('event-A', function(){
    // log something()
    // consume or stop the event
  })
  .on('event-A', function(){
    // this never fires
  });

我刚刚编写了一个库(事件链),它复制了EventEmitter API,并通过拒绝承诺或调用this.stop()提供取消。还从signals中窃取了一个想法,你可以有"单事件"发射器。

我不知道有任何节点api允许取消事件调度。但是,您可以采用任何与节点兼容的事件库(node、pubsubjects等),并按照以下准则修改调度函数:

  • 将取消函数作为this/first/last(选择您最喜欢的)参数传递给事件侦听器。这个取消函数将在闭包中有一个取消属性,你的事件调度程序将在调度事件之前检查这个属性。

但请注意:

  • 由于这是一个副作用,它会使您的程序更难以理解。您必须记住副作用发生的所有地方,以便完全理解您的程序。此外,您的事件处理程序必须按顺序执行,这意味着您必须具有一致的顺序定义(注册侦听器的顺序,用户定义的顺序?)