1

我成功实现了 pdf2json 以使用 node 从 url 获取和读取 pdf。

但是,Azure 函数是一个异步函数,并在执行 pdfPipe.on("pdfParser_dataReady", pdf => {}) 之前完成执行。

我的实现如下

var request = require('request');
var PDFParser = require("pdf2json");

var pdfParser = new PDFParser(this, 1);
var pdfPipe = request({ url: pdfUrl, encoding: null }).pipe(pdfParser);
pdfPipe.on("pdfParser_dataError", err => console.error(err));
pdfPipe.on("pdfParser_dataReady", pdf => {
   /// hndle pdfData
});

这在我机器上的节点中运行良好。但我需要将 pdfPipe.on('---', function(){}) 转换为 async 并等待,因为 azure 函数不会等待 pdfPipe 完成。

怎么做?

4

1 回答 1

0

使用以下方法解决

async function streamToPdf(readableStream) {
    return new Promise((resolve, reject) => {
        readableStream.on("pdfParser_dataReady", (pdf) => {
            resolve(pdf);
        });
        readableStream.on("pdfParser_dataError", reject);
    });
}

接着

var pdfPipe = request({ url: pdfUrl, encoding: null }).pipe(pdfParser);

var pdf = await streamToPdf(pdfPipe);
于 2020-04-30T05:48:26.113 回答