在条件之后停止事件监听器

时间:2017-05-16 18:06:34

标签: javascript node.js events

我有类似的代码:

emitter.on('request', request => {
    if(condition) doSomething(request);
});

function doSomething(request){
    emitter.on('message', message => {
        if(anotherCondition){
            //
            //Some code to send something
            //
        }
    })
}

基本上,如果不清楚,我试图让听众等待请求然后发回任何并等待接收者的响应我发送的。但是,当发生这种情况时,on('message'侦听器仍然处于活动状态,而发射器获取它的下一个请求会发送 两次。下一次,它会发送 三次次。我该如何安全地阻止它?

1 个答案:

答案 0 :(得分:1)

每次调用doSomething()时,您都可以从代码中观察到您正在创建一个新的侦听器。因此,每次调用doSomething()

时,收到消息的次数都会增加

你应该在doSomething()和之外定义emitter.on('message'.... block 而只是发出事件emit('message'...在doSomething()内发出事件或使用removeListener('message ....在某些情况下禁用事件发射器。

如果您一直保持1个发射器和1个侦听器,那么您应该没问题。

这应该是你期望的。