如何获取async函数的返回值而非Promise对象?
解决async函数返回值为Promise对象的问题
问题分析
你的代码存在两个关键问题:
imageCheck作为async函数,内部未返回T.recognize的Promise链,导致它实际返回的是一个状态为resolved、值为undefined的Promise- 直接打印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
相关产品推荐
相关产品推荐

