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

如何获取async函数的返回值而非Promise对象?

解决async函数返回值为Promise对象的问题

问题分析

你的代码存在两个关键问题:

  1. imageCheck 作为async函数,内部未返回T.recognize的Promise链,导致它实际返回的是一个状态为resolved、值为undefined的Promise
  2. 直接打印async函数的调用结果,未等待Promise完成,因此拿到的是Promise对象本身而非最终结果

修复方案

方案1:修正函数并使用then处理结果

const T = require("tesseract.js");

async function imageCheck(T, url){
    // 返回Promise链的结果,让外部能拿到最终文本
    return T.recognize(url, 'eng')
    .then(out => out.data.text);
}

// 通过then回调获取异步结果并打印
imageCheck(T, 'EXAMPLEURL').then(text => {
    console.log("the text is " + text);
});

方案2:使用await(需在async上下文执行)

const T = require("tesseract.js");

async function imageCheck(T, url){
    // 用await替代then,代码更简洁直观
    const out = await T.recognize(url, 'eng');
    return out.data.text;
}

// 必须在async函数内使用await
async function main(){
    const text = await imageCheck(T, 'EXAMPLEURL');
    console.log("the text is " + text);
}

main();

补充说明

  • async函数的返回值必然是Promise,这是语法规则,不能直接将其当作同步值使用,必须通过then回调或await(仅在async函数内部)获取最终结果
  • 原代码中Promise.resolve(url)这一行没有实际作用,因为url本身已是Promise对象,该行既不会改变其状态,也无法获取异步结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:45:52