6

私は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)

しかし、プログラム内の行番号はわかりません。

私はいくつかの場所でストリームを扱うだけですが、それらは次のとおりです。

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

3 つのファイル名が同じになることは決してないため、同じ場所で読み取り/書き込みを行うべきではありません。ただし、以前の失敗した実行からストリームが適切に閉じられなかった可能性があると思います。すべてのストリームを強制的に閉じる方法はありますか?

4

1 に答える 1

1

2 つの提案:

  1. を使用longjohnすると、コード内の行番号を提供できる場合があります。(例外は非同期ブロックで発生するため、スタック トレースにはプログラムが含まれず、V8 メイン ループの tick ハンドラーでのみスタックされます)。

  2. 問題は、誰かが「終了」したばかりのストリーム (閉じられた、または終了に達し、下層のレイヤーが「終了」を通知した)から読み取ろうとしているようです。

于 2013-09-11T18:09:17.840 に答える