首页 > 解决方案 > 如何在 Javascript 中清除超时后取消 setTimeout() 中的事件

问题描述

因此,我正在尝试为 Discord 制作一个实时控制台,以便在我离开计算机时可以看到错误。我试图做到这一点,以便每次侦听器接收数据时,它都会清除先前的超时并创建一个新超时,这样就不会发送相同的内容x多次,因为侦听器被调用x了多次。现在我遇到了问题。我可以清除超时但不能清除其中的事件。

child.stdout.on("data", (data) => {
    stdout = stdout + data.toString();

    clearTimeout(timeout);

    timeout = setTimeout(() => {
        message.channel.send([stdout], {
            code: true,
            split: true
        });
    })
});

所以这段代码最终仍然发送x了很多次。我将如何取消里面的事件来解决这个问题?

编辑:我的愚蠢错误。我在清理代码时不小心删除了超时。下面的代码解决了一切。

child.stdout.on("data", (data) => {
    stdout = stdout + data.toString();

    clearTimeout(timeout);

    timeout = setTimeout(() => {
        message.channel.send([stdout], {
            code: true,
            split: true
        });
    }, 3000)
});

标签: javascript

解决方案


我的愚蠢错误。我在清理代码时不小心删除了超时。下面的代码解决了一切。

child.stdout.on("data", (data) => {
    stdout = stdout + data.toString();

    clearTimeout(timeout);

    timeout = setTimeout(() => {
        message.channel.send([stdout], {
            code: true,
            split: true
        });
    }, 3000)
});

推荐阅读