【发布时间】:2019-12-09 17:22:36
【问题描述】:
我正在尝试写入文件并同时读取它。我能够将数据写入文件,但无法从中读取。执行此操作时不会引发错误,并且仅在读取文件流上调用 End 事件。
我最近读到我们不能在 JS 中设置竞态条件,因为它是单线程的,并且竞态条件只是由于程序中的糟糕设计而产生的。所以,我试图摆弄并试图创造一个竞争条件。我原以为节点会抛出一些错误,但遇到了这个意外的输出。
const readFile = fs.createReadStream('./1GB.bin');
const writeFile = fs.createWriteStream('./test.bin');
const read = fs.createReadStream('./test.bin');
readFile.pipe(writeFile);
try {
read.on('data', data => {
console.log("data!", data.length);
})
read.on('end', _ => {
console.log("END!");
})
read.on('error', err => console.log("Phatt gaya!"))
}
catch (err) {
console.log("CAN't read 2nd file!");
}
预期结果:尝试读取文件时抛出错误
实际结果:不抛出错误,仅触发End事件
有没有人知道它为什么会这样运行?
如果有人感兴趣,请链接到比赛条件文章: [https://blog.raananweber.com/2015/06/17/no-there-are-no-race-conditions-in-javascript/]
【问题讨论】:
标签: node.js fs node-streams