节点是否有办法使用/停止事件?

时间:2015-08-20 11:20:16

标签: 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
  });

2 个答案:

答案 0 :(得分:1)

我不知道任何允许取消事件调度的node-api。但您可以使用任何节点兼容的事件库(node,pubsubjs等)并使用以下指南修改调度功能:

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

但请注意:

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

答案 1 :(得分:0)

我刚写了一个库(event-chains),它复制了EventEmitter API并通过被拒绝的承诺或通过调用this.stop()来取消。还可以从signals窃取一个想法,你可以拥有“单一事件”发射器。