javascript - 在条件后停止事件监听器

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

基本上,如果这不是很清楚,我会尝试让监听器等待请求然后发回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/

相关文章:

javascript - R ggplot 或 plotly 的用户输入没有 Shiny

javascript - 如何使用javascript或jquery快速创建表

javascript - 在 JavaScript 中为新添加的元素添加 onclick 事件

javascript - 请求响应后正文中出现奇怪的字符

node.js - Nodejs + phantomjs 与纯 phantomjs - 页面加载时间

python - 在 Kivy 中使用按钮/事件返回数据的最佳方式

python - 在 Python 2.7 中模拟按键事件

php - 如果加载时间超过 10 秒,如何刷新页面?

javascript - 如何为 d3 可折叠树中的节点分配唯一的 id

javascript - 使用 Socket.io 的通知 - 如何发送给特定的用户/收件人?