读取请求等待完成的流

mpe*_*pen 6 stream node.js

我正在使用pngjs来读写一些PNG.我定期收到此错误:

Error: There are some read requests waiting on finished stream
    at ChunkStream._end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/chunkstream.js:107:13)
    at ChunkStream.end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/chunkstream.js:94:14)
    at PNG.end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/png.js:105:18)
    at ReadStream.onend (_stream_readable.js:483:10)
    at ReadStream.g (events.js:175:14)
    at ReadStream.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:910:16
    at process._tickCallback (node.js:415:13)
Run Code Online (Sandbox Code Playgroud)

但它并没有在我的程序中给我一个行号.

我只在几个地方处理流,但它们是:

fs.createReadStream(oldScreen).pipe(new PNG).on('parsed', function() {
    promises[0].resolve(this);
});

fs.createReadStream(newScreen).pipe(new PNG).on('parsed', function() {
    promises[1].resolve(this);
});
Run Code Online (Sandbox Code Playgroud)

result.png.pack().pipe(fs.createWriteStream(diffName));
Run Code Online (Sandbox Code Playgroud)

这三个文件名永远不会相同,因此它们不应该读/写到同一个地方.我想有可能是一个流没有从之前的失败运行中正确关闭.有没有办法可以强制所有的流关闭?

Nit*_*ked 1

两个建议:

  1. 使用longjohn,它可能能够在代码中提供行号。(异常发生在异步块中,因此您的堆栈跟踪不包含您的程序,它仅与 V8 主循环中的刻度处理程序堆栈)。

  2. 问题似乎是有人试图从刚刚“结束”的流中读取(已关闭,或已到达其末尾并且底层发出“结束”信号)。