监听两次, 不代表打开两次.
监听 和 打开流 是两件事.
监听 是由 Nodejs 的 events 模板实现的.
具体的可以看这儿: https://nodejs.org/dist/lates...
Events.emit 方法, 会按照监听器注册的顺序, 同步地调用监听器方法.
所以, 其实只是你注册的 data
的方法, 同步地调用了两次而已.
比如下面这段代码:
rs.on('open', function () {
console.log("读取的文件已打开")
})
rs.on("close", function () {
console.log("读取流结束/")
})
rs.on('data', function (chunk) {
console.log("单批数据流入:" + chunk.length)
console.log(chunk)
chunk.fill('1') // 注意这段
})
rs.on('data', function (chunk) {
console.log("单批数据流入:" + chunk.length)
console.log(chunk)
})
// 读取的文件已打开
// 单批数据流入:358
// <Buffer 63 6f 6e 73 74 20 6e 65 74 20 3d 20 72 65 71 75 69 72 65 28 27 6e 65 74 27 29 3b 0a 0a 63 6f 6e 73 74 20 73 65 72 76 65 72 20 3d 20 6e 65 74 2e 63 72 ... 308 more bytes>
// 单批数据流入:358
// <Buffer 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 ... 308 more bytes>
如果我在第一个监听器中, 更改了 chunk
的值, 那么第二个监听器获取到的, 就是更改后的 chunk
, 因为是引用类型.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…