Node.js stream.on('end'... 不会使文件可读
Node.js stream.on('end'... does not make file readable
我尝试这样捕捉 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
时
Error: Image given has not completed loading
在这一行:
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
但是我没有看到任何其他方法可以在写入流后继续控制流。如果我让整个父函数 return,那么文件看起来是可读的。我试过将我的子函数包装在 setImmediate()
中,但这似乎只能间歇性地工作。
捕获写入流的最终可用最终结果的最终方法是什么?
node-canvas 文档声称 end
事件标志着文件的最终写入:https://www.npmjs.com/package/canvas#canvaspngstream
但如果您立即尝试使用它,则会产生上述错误。
`finish' 好像根本没有实现。
我会把它放在评论中(但不能):
您需要关闭名为 'out' 的 WriteStream - 使用 aarosil 建议的事件并执行 out.close()
由于您已将 stream
传送到 out
,out
将在 stream
的 end
事件中自动 close()
(这是您 .pipe()
流时自动设置的一部分)。因此,要知道文件何时完成写入,请收听 out
流的 close
事件。
您看到了断断续续的结果,因为 stream
end
事件与 out
可写流用来完成文件的事件相同。
我尝试这样捕捉 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
时
Error: Image given has not completed loading
在这一行:
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
但是我没有看到任何其他方法可以在写入流后继续控制流。如果我让整个父函数 return,那么文件看起来是可读的。我试过将我的子函数包装在 setImmediate()
中,但这似乎只能间歇性地工作。
捕获写入流的最终可用最终结果的最终方法是什么?
node-canvas 文档声称 end
事件标志着文件的最终写入:https://www.npmjs.com/package/canvas#canvaspngstream
但如果您立即尝试使用它,则会产生上述错误。
`finish' 好像根本没有实现。
我会把它放在评论中(但不能):
您需要关闭名为 'out' 的 WriteStream - 使用 aarosil 建议的事件并执行 out.close()
由于您已将 stream
传送到 out
,out
将在 stream
的 end
事件中自动 close()
(这是您 .pipe()
流时自动设置的一部分)。因此,要知道文件何时完成写入,请收听 out
流的 close
事件。
您看到了断断续续的结果,因为 stream
end
事件与 out
可写流用来完成文件的事件相同。