Node Events 事件触发器 once 问题
发布于 3 年前 作者 HelloAny 2343 次浏览 来自 问答

看教程的过程中看到一个例子,觉得蛮奇怪的 https://www.nodejs.red/#/nodejs/events?id=编码实现

这个解决并发问题的下面大篇幅的讲了 once 和 on 的区别,但是我亲手实践发现这里文件查找的例子将 once 换成 on 结果也是一样的, 这里难道不是基于 status 控制状态,readFile 是异步所以才能产生这个结果吗,为什么非要用 once 来解决,感觉用 on 来解决这里的问题也是一样的。。

2 回复

once 只触发一次啊……

once 只触发一次,并且隐含的是:触发后注册的侦听器会被移除。

在你发的这个 case 里:

for (let i=1; i<=11; i++) {
    if (i % 2 === 0) {
        select(`/tmp/a.txt`, 'a 文件', function(err, result) {
            console.log('err: ', err, 'result: ', result);
        });
    } else {
        select(`/tmp/b.txt`, 'b 文件', function(err, result) {
            console.log('err: ', err, 'result: ', result);
        });
    }
}

注意 select 是多次执行的,假如循环次数进一步增加,你用 on 会在全局的 emitter 里重复注册侦听器 cb 导致内存泄露,而 once 则不会。

回到顶部