在pipe道未启动后,nodejsstream完成callback
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);
但第二个嵌套函数中的代码永远不会启动。 pdf是来自pdfkit库的对象。 我该如何解决?
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);
您需要在pipe道对象上捕获事件finish
,而不是在pdf对象上:
console.log("saving file"); pdf .pipe( fs.createWriteStream("./test2.pdf") ) .on( 'finish', function(){ console.log("Finished"); }); pdf.end(); console.log("After save");
pdf
是为了从未被写入而读取 。 这意味着您应该将其视为可读stream,因此请在pdfFile
finish
并清除pdf.end()
。
如果pdf
是一个合适的NodeJSstream,则可以简单地将其转换为写入stream并完成。 如果你想在文件保存后退出你的程序,你可以在“closures”的时候这么做。 注意:没有“保存后”状态(因为你结束了这个过程)。 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);