此函数位于另一个设置wstream写入流的函数中
一次成功运行wstream的文件。
但是运行这个

fs.watch(fname, function watcher (evt, fname) {


        if (evt === 'change') {
            wStream.write("File " + fname + " changed\n");

        } else if (evt === 'rename') {
            wStream.write("File " + orig + " renamed\n");

        }

产生此错误
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: write after end
    at writeAfterEnd (_stream_writable.js:167:12)
    at WriteStream.Writable.write (_stream_writable.js:214:5)

在不结束此流的情况下,如何继续重用它?
更新
正如comments部分所指出的,有一个进程显式地结束这个流。
我正在运行一个child_process.spawn方法
SomeSpawn.stdout.pipe( wStream );

为什么以及如何关闭此流?我怎样才能阻止它明确地关闭它呢?
{end:false}

最佳答案

child_process.spawn返回一个childprocess对象。这个进程有自己的stdout,它是一个可读的流。readablestream在通过管道传输到可写流时,会在该可写流完成读取时对其调用end()
如果您不想让可读流最终自动关闭目标流,只需传递给pipe选项{ end: false },例如:

SomeSpawn.stdout.pipe( wStream, { end: false } );

在这种情况下,您将不得不在将来的某个时候手动关闭它。

关于node.js - 重用写入流而不结束它,并一遍又一遍地声明新的流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32358292/

10-09 22:05