异步函数返回空值求助:调用函数无法获取有效返回值
问题修复:异步函数返回空值的解决方法
问题根源
你的readFile函数中使用forEach循环执行异步的Tesseract图片识别操作,但forEach不支持等待异步任务完成。函数会直接跳过异步操作,执行到return texts语句,此时texts还是初始的空字符串,导致返回值为空。
修复方案
改用map结合Promise.all来处理所有异步任务,确保所有识别完成后再返回拼接好的文本:
async function Print(){ var result = await readFile(); console.log(result); } async function readFile() { const FileName = ['g.png','g2.png']; // 将每个文件的识别操作转为Promise,存入数组 const textPromises = FileName.map(async (fileName) => { const { data: { text } } = await Tesseract.recognize(fileName, 'ara', { logger: m => console.log(m) }); return text; }); // 等待所有识别任务完成,获取所有文本结果 const allTexts = await Promise.all(textPromises); // 拼接所有文本并返回 return allTexts.join(''); }
修复说明
map会遍历文件列表,为每个文件生成一个异步识别的Promise,返回包含所有Promise的数组Promise.all会等待数组中所有Promise执行完成,返回一个包含所有识别结果的数组- 最后用
join('')将所有文本拼接成一个字符串返回,确保返回值是所有图片识别后的完整文本
内容的提问来源于stack exchange,提问作者Mohalzurghni
相关产品推荐
相关产品推荐

