Node.js 写入结果可用之前是否应注册“drain”事件
我有一段代码:Node.js 写入结果可用之前是否应注册“drain”事件,node.js,node-streams,Node.js,Node Streams,我有一段代码: const file = fs.createWriteStream('./test.txt'); let written = true; // handler is added before even an attempt to write is made file.on('drain', function () { written = true; console.log('drained'); }); const interval = setInterval
const file = fs.createWriteStream('./test.txt');
let written = true;
// handler is added before even an attempt to write is made
file.on('drain', function () {
written = true;
console.log('drained');
});
const interval = setInterval(function () {
if (Date.now() - time > 10000) {
clearInterval(interval);
}
if (written) {
written = file.write(new Array(1000000).join('z'));
}
}, 100);
我想知道,即使尝试写入,是否也会添加处理程序的标准做法?在使用
文件的情况下。在('drain')
侦听器上,您设置了常规侦听器来排出流的事件。
注意:关闭可写流后,此侦听器将被删除
一般来说,代码可以正常工作,但Node.js中最常见的做法是对每个内部缓冲区超过的情况使用stream.once('drain')
处理程序。Node.js
文档中介绍了这种方法:
function writeOneMillionTimes(writer, data, encoding, callback) {
var i = 1000000;
write();
function write() {
var ok = true;
do {
i -= 1;
if (i === 0) {
// last time!
writer.write(data, encoding, callback);
} else {
// see if we should continue, or wait
// don't pass the callback, because we're not done yet.
ok = writer.write(data, encoding);
}
} while (i > 0 && ok);
if (i > 0) {
// had to stop early!
// write some more once it drains
writer.once('drain', write);
}
}
}