0

このように、キャンバスストリームの書き込みの完了をキャッチしようとします:

    var out = fs.createWriteStream(out_fs);
    var stream = canvas.createPNGStream({
        bufsize: 2048
    });
    stream.on('end', function () {
      // can we use out_fs now? why not?
    });
    stream.pipe(out);

しかしout_fs、サブ関数を読み込もうとすると

エラー: 指定された画像の読み込みが完了していません

この行で:

            fs.readFile(out_fs, function (err, data) {
                    if (err) throw err;
                    var img = new Canvas.Image; // Create a new Image
                    img.src = data;
                    ctx2.drawImage(img, 0, 50, img.width, img.height); <--

http://nodejs.org/api/stream.html#stream_event_end

しかし、ストリームが書き込まれた後に制御フローを続行する方法は他にありません。親関数全体を返すと、ファイルは読み取り可能に見えます。子関数を でラップしようとしましたsetImmediate()が、断続的にしか機能しないようです。

ストリームの書き込みの最終的な使用可能な最終結果をキャッチする決定的な方法は何ですか?

node-canvas のドキュメントでは、イベントがファイルの最終的な書き込みを通知すると主張してendいます: https://www.npmjs.com/package/canvas#canvaspngstream

ただし、すぐに使用しようとすると、上記のエラーが発生します。

`finish' はまったく実装されていないようです。

4

2 に答える 2

1

にパイプstreamしたのでout、のイベントで自動的に実行されます(これは、ストリーム時に自動的にセットアップされるものの一部です)。したがって、ファイルの書き込みがいつ終了したかを知るには、ストリーム のイベントをリッスンします。outclose()streamend.pipe()closeout

このイベントは、ファイルをファイナライズするために書き込み可能なストリーム stream endによって使用されるイベントと同じであるため、断続的な結果が表示されました。out

于 2015-02-17T00:52:25.083 に答える