[英]nodejs stream finish callback after pipe is not launched
I need to do some housekeeping after pdf file is saved: 保存pdf文件后我需要做一些内务管理:
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdf.on('finish',function(){
console.log("Finished");
process.exit();
}).pipe(pdfFile);
pdf.end();
console.log("After save");
}, true, true);
But code inside second nested function is never launched. 但是第二个嵌套函数中的代码永远不会启动。 pdf is object from pdfkit library.
pdf是来自pdfkit库的对象。 How can I fix it?
我该如何解决?
UPD: this approach doesn't work also: UPD:这种方法也不起作用:
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdfFile.on('finish',function(){
console.log("Finished");
process.exit();
});
pdf.pipe(pdfFile);
//pdf.end();
console.log("After save");
}, true, true);
You need to catch the event finish
on the pipe object, not on the pdf object: 您需要在管道对象上捕获事件
finish
,而不是在pdf对象上:
console.log("saving file");
pdf
.pipe( fs.createWriteStream("./test2.pdf") )
.on( 'finish', function(){
console.log("Finished");
});
pdf.end();
console.log("After save");
If pdf
is a proper NodeJS stream, you can simply pipe it into the write stream and be done. 如果
pdf
是一个正确的NodeJS流,您只需将其传输到写入流中即可完成。 If you want to quit your program after the file is saved, you could do this on 'close'. 如果要在保存文件后退出程序,可以在“关闭”时执行此操作。 Notice: there is no "after saving" state (because you end the process).
注意:没有“保存后”状态(因为您结束了该过程)。 That
console.log("After save")
line in your code is called before the file is saved! console.log("After save")
文件之前调用代码中的console.log("After save")
行console.log("After save")
行!
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdf.pipe(pdfFile);
pdfFile.on('close',function(){
console.log("Finished");
process.exit();
});
}, true, true);
pdf
is meant to be read from not written to . pdf
旨在通过不写入来 阅读 。 That means you should be treating it as a Readable stream, so listen for finish
on pdfFile
instead and remove pdf.end()
. 这意味着您应该将其视为可读流,因此请在
pdfFile
上pdfFile
finish
并删除pdf.end()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.