我正在学习NodeJS的事件模型。
我对输出感到困惑。
代码只是将一些文本写入文件并将其读回。 执行顺序似乎超出了我的控制范围。
var fs = require('fs');
var ws = fs.createWriteStream("my_file.txt");
ws.once('open', function(fd) {
console.log( 'ws_open' );
ws.write("My first row\n");
ws.write("My second row\n");
ws.write("My third row\n");
ws.destroySoon();
});
ws.once('close', function() {
console.log( 'ws_close');
});
var rs = fs.createReadStream("my_file.txt");
rs.setEncoding('utf8');
rs.once('open', function(fd) {
console.log( 'rs_open' );
});
rs.once('close', function() {
console.log( 'rs_close');
});
rs.once('data', function(data) {
console.log( 'rs_data' );
console.log( data );
});
rs.once('error', function(exception) {
console.log( 'rs_exception' );
console.log( exception );
});
这是输出。
rs_open
ws_open
rs_close
ws_close
有时候会变成
ws_open
rs_open
rs_data
我的第一行rs_close
ws_close
有人可以给我一些解释吗?
提前感谢。
答案 0 :(得分:2)
你正在做异步的事情,好像它是同步的。仅仅因为代码中的某些东西较低并不意味着它会在以后发生。如果您在完成编写之前不想读取文件,请将读取内部写入回调。
如:(简化)
writeFile (name, writeData, function (error) {
if (error)
.... // handle error
else { // successfully wrote file
readFile(name, function (error, readData) {
if (error)
.... // handle error
else { // successfully read file
... // do something with readData
}
});
}
});