在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);