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



我试着这样完成画布流的编写:

    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()包装我的子函数,但这似乎只是间歇性的。

获取流的最终可用最终结果的最终方法是什么?

节点画布文档声称end事件表示文件的最终写入:https://www.npmjs.com/package/canvas#canvaspngstream

但如果你立即尝试使用它,这会产生上面的错误

`finish"似乎根本没有实现。

由于您已经通过管道将stream传输到out,因此out将在streamend事件中自动成为close()'d(这是在.pipe()作为流时自动设置的部分内容)。因此,要知道文件何时完成写入,请收听out流的close事件。

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

我会把它放在注释中(但不能):

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

相关内容

  • 没有找到相关文章

最新更新