下面的代码创建一个文本文件,然后读取它,覆盖它,然后再次读取它。除了创建文件之外,三个 I/O 操作都是使用 Node.js 异步 readFile 和 writeFile 执行的。
我不明白为什么第一次读取没有返回错误但也没有数据。这段代码的输出是:
- 开始...
- 完毕。
- 首次读取返回 EMPTY 数据!
- 写完OK
- 第二次读取返回的数据:更新的文本
即使操作以任意顺序发生(由于它们的异步性质),我也不希望得到一个“空数据”对象。
任何想法为什么我在读取文件时得到一个空数据(并且没有错误)?
我可以做些什么来确保读取文件内容吗?
var fs = require('fs');
var fileName = __dirname + '/test.txt';
// Create the test file (this is sync on purpose)
fs.writeFileSync(fileName, 'initial test text', 'utf8');
console.log("Starting...");
// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
var msg = "";
if(err)
console.log("first read returned error: ", err);
else {
if (data === null)
console.log("first read returned NULL data!");
else if (data === "")
console.log("first read returned EMPTY data!");
else
console.log("first read returned data: ", data);
}
});
// Write async
fs.writeFile(fileName, 'updated text', 'utf8', function(err) {
var msg = "";
if(err)
console.log("write finished with error: ", err);
else
console.log("write finished OK");
});
// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
var msg = "";
if(err)
console.log("second read returned error: ", err);
else
if (data === null)
console.log("second read returned NULL data!");
else if (data === "")
console.log("second read returned EMPTY data!");
else
console.log("second read returned data: ", data);
});
console.log("Done.");