Node.js stream.on('end'...不会使文件可读

时间:2015-02-16 21:03:18

标签: node.js canvas stream node-canvas

我试着抓住画布流的完成:

    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'似乎根本没有实现。

2 个答案:

答案 0 :(得分:1)

我会把它放在评论中(但不能):

您需要关闭名为'out'的WriteStream - 使用aarosil建议的事件并执行out.close()

答案 1 :(得分:1)

由于您已将stream提交至outoutclose()自动stream&#39; s {{ 1}} event(当你end流时,这是自动设置的一部分)。因此,要知道何时完成文件编写,请收听.pipe()流的close事件。

您看到间歇性结果,因为out stream事件与end可写流将用于完成文件的事件相同。