Node Events 事件触发器 once 问题
看教程的过程中看到一个例子,觉得蛮奇怪的 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
则不会。