Nodejs流结束回调后,管道没有启动



我需要在保存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);

您需要在管道对象上捕获事件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是一个合适的NodeJS流,您可以简单地将其管道到写流中并完成。如果你想在文件保存后退出程序,你可以按"close"键。注意:没有"保存后"状态(因为你结束了进程)。在文件保存之前,代码中的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表示从读取,而不是将写入。这意味着您应该将其视为可读流,因此侦听pdfFile上的finish并删除pdf.end()

最新更新