fs模块同时异步读和写同一个文件时,为什么write会比read更快,而且读出来的总是写了后的数据,不是之前文件的数据
发布于 3 年前 作者 heguangda 2038 次浏览 来自 问答

我知道node.js是谁先做完就先执行谁的回调,但是有一点不解的是,为什么总是会读到写完之后的文件,理论上不是应该在write的时候,read的操作已经读了一些之前的文件了吗。

var fs = require(‘fs’) console.time(‘read’) fs.readFile(’./test.txt’, ‘utf8’, function(err, data){ console.log(data); console.timeEnd(‘read’)
}); console.time(‘write’) fs.writeFile(’./test.txt’, ‘这是第一行这是这是第一行这是这是第一行这是这是第一行这是这是第一行这是这是第一行这是这是第一行这是这是第一行这是’,function(err){ if(err) console.log(‘写文件操作失败’); else console.log(‘写文件操作成功’); console.timeEnd(‘write’) });

5 回复

异步操作不能保证顺序

@waitingsong 对的,这个我清楚,但是读和写是同时在做的吗,这样的话为什么我读不到写之前的数据,例如我文件内容是1231321321这样,但是我读不到,只能读到写了后的,我一开始以为会是出现读到了部分数字,然后再加上写进去的内容

你 writeFile 不是覆盖掉原来的么。。。

write不是直接写到磁盘上, 而是写到内存缓冲层上,

@atian25 那如果我在read 和 write加个足够大的同步for循环,单后读出来的还是已经写进去的,理论上读的异步操作在for循环还没结束的时候就已经完了吗,for循环结束后再去执行写的异步,但是为什么还是写的异步先执行完

回到顶部