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

使用pdfreader库解析PDF时Async Await返回undefined如何解决

问题根因

你使用的pdfreader库的parseBuffer方法是回调式异步API,本身不返回Promise,所以直接await是无效的,代码不会等待回调执行完毕就会向下执行,提前返回初始值ENGR = false,这就是返回顺序异常的核心原因。

解决方案

将parseBuffer手动包装为Promise,在回调的结束节点(错误触发、解析完成)执行resolve/reject变更Promise状态,这样await就能正常等待解析全流程完成后再继续执行后续代码。

修正后的完整代码
const pdfreader = require("pdfreader");

module.exports = async function pdfPageParser(pageBuffer, pageKey) {
    const keyword = 'xyz';
    // 手动将回调式API包装为Promise
    return new Promise((resolve, reject) => {
        let ENGR = false;
        new pdfreader.PdfReader().parseBuffer(pageBuffer, (err, item) => {
            // 解析出错时reject抛出错误
            if (err) {
                console.log(err);
                return reject(err);
            }
            // item为空代表解析全部完成,resolve最终结果
            if (!item) {
                console.log('Finish Parsing');
                return resolve(ENGR);
            }
            // 匹配到关键词时更新状态
            if (item.text && item.text.toLowerCase().includes(keyword)) {
                ENGR = true;
            }
        });
    })
}
逻辑说明
  • 整个解析流程被包裹在Promise内部,只有解析完全结束或者出错时,Promise才会变更状态,外层的await才会继续执行后续代码
  • 你之前尝试直接获取parseBuffer返回值的方式无效,因为回调函数的return值不会传递到外层,只有通过Promise的resolve/reject才能把结果正常传递出去
  • 外层调用逻辑不需要修改,仍然可以用const variable = await pdfPageParser(pdfBuffer, pageKey)的写法等待返回结果

内容的提问来源于stack exchange,提问作者Tianyu Duan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:01