读取完成的stream中等待的请求

我使用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) 

但是在我的程序里面没有给我一个行号。

我只是在几个地方处理stream,他们是:

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

 result.png.pack().pipe(fs.createWriteStream(diffName)); 

三个文件名是不一样的,所以他们不应该读/写同一个地方。 我想这可能是一个stream没有得到正确的closures从以前的失败运行。 有没有一种方法可以强制所有的stream很好地closures?

两点build议:

  1. 使用longjohn ,它可能能够在你的代码中提供行号。 (exception发生在asynchronous块中,所以你的堆栈跟踪不包含你的程序,它只和V8主循环中的tick处理程序堆栈在一起。

  2. 似乎问题在于有人试图从刚刚“结束”的stream中读取 (已closures,或已达到结尾,底层显示“结束”)。