Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 写入结果可用之前是否应注册“drain”事件_Node.js_Node Streams - Fatal编程技术网

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);
        }
    }
}