You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pdf2json事件回调转为async/await以适配Azure Function?

解决Azure Function中pdf2json事件回调未执行就结束的问题

我碰到过一模一样的问题!Azure Function的异步执行模型会在函数返回时立即终止进程,而你原来的代码里pdfParser_dataReady是事件驱动的异步回调,没有被函数等待,所以函数直接提前结束了。要解决这个问题,我们只需要把事件回调逻辑包装成一个Promise,这样就能用async/await让函数乖乖等待PDF解析完成。

这里是修改后的完整实现:

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

// 把PDF解析逻辑包装成返回Promise的函数
async function parsePdfFromUrl(pdfUrl) {
  return new Promise((resolve, reject) => {
    const pdfParser = new PDFParser(this, 1);
    
    // 处理解析成功事件,完成后返回PDF数据
    pdfParser.on("pdfParser_dataReady", (pdf) => {
      resolve(pdf);
    });

    // 处理解析错误事件,抛出错误信息
    pdfParser.on("pdfParser_dataError", (err) => {
      reject(err);
    });

    // 发起请求并将数据流导入pdfParser
    request({ url: pdfUrl, encoding: null }).pipe(pdfParser);
  });
}

// Azure Function的入口函数示例
module.exports = async function (context, req) {
  try {
    const pdfUrl = req.query.pdfUrl || "你的默认PDF链接";
    // 等待PDF解析完成再继续执行
    const pdfData = await parsePdfFromUrl(pdfUrl);
    
    // 这里写你处理PDF数据的业务逻辑
    context.log("PDF解析完成:", pdfData);
    context.res = {
      status: 200,
      body: { message: "PDF解析成功", data: pdfData }
    };
  } catch (err) {
    context.log.error("PDF解析失败:", err);
    context.res = {
      status: 500,
      body: { message: "PDF解析出错", error: err.message }
    };
  }
};

关键细节说明:

  • 我们把PDF解析的事件流包装成了Promise,让异步的事件触发逻辑可以被await等待,确保Azure Function不会提前结束。
  • 入口函数声明为async,用try/catch包裹await调用,既保证了等待逻辑,也能捕获解析过程中出现的错误。
  • 这样修改后,Azure Function的执行逻辑就和你本地运行时完全一致了,会等到PDF解析完成后再返回响应。

内容的提问来源于stack exchange,提问作者Mayank Kumar Chaudhari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:47:40