次のコードは、テキストファイルを作成し、それを読み取り、上書きして、再度読み取ります。ファイルの作成を除いて、3つのI/O操作はNode.js非同期readFileとwriteFileを使用して実行されます。
最初の読み取りでエラーが返されないのにデータも返されない理由がわかりません。このコードの出力は次のとおりです。
- 起動...
- 終わり。
- 最初に返された空のデータを読み取ります!
- 書き込み終了OK
- 2番目に返されたデータの読み取り:更新されたテキスト
操作が任意の順序で発生したとしても(非同期の性質のため)、「空のデータ」オブジェクトを取得することは期待していませんでした。
ファイルを読み取るときに空のデータを取得する(エラーが発生しない)理由はありますか?
ファイルの内容が確実に読み取られるようにするためにできることはありますか?
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.");