我有一个类似这样的代码:
emitter.on('request', request => {
if(condition) doSomething(request);
});
function doSomething(request){
emitter.on('message', message => {
if(anotherCondition){
//
//Some code to send something
//
}
})
}
基本上,如果这不是很清楚,我会尝试让监听器等待请求然后发回whatever 并等待接收者对该请求的响应whatever 我发送。但是,当发生这种情况时,on('message'
监听器仍然处于事件状态,并且发射器收到的下一个请求会发送 whatever 两次 . 下一次,它发送 whatever 三次。我如何安全地阻止它?
最佳答案
您可以从代码中观察到每次调用 doSomething() 时都会创建一个新的监听器。因此,每次调用 doSomething() 时,您收到消息的次数都会增加
您应该在 doSomething() 和外部定义 emitter.on('message'.... block 而只是在 doSomething() 中发出事件 emit('message'... 以发出事件或使用 removeListener('message.... 在某些情况下禁用事件发射器。
如果您始终保持 1 个发射器和 1 个监听器,应该没问题。
这应该是您所期望的。
关于javascript - 在条件后停止事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008626/