如何将async/await函数detecText的返回值传入translateText函数?
如何将detecText的识别结果传入translateText进行翻译
先修复translateText的返回逻辑
原translateText函数里的forEach循环无法让函数返回翻译结果,需要调整返回值:
const target = "en"; const translateText = async (text) => { let [translations] = await translate.translate(text, target); // 统一转为数组格式,兼容单文本和多文本翻译场景 translations = Array.isArray(translations) ? translations : [translations]; // 返回第一个翻译结果(若需全部结果,直接返回translations数组即可) return translations[0]; };
方案1:在原forEach的then链中调用翻译函数
直接在detecText的成功回调里调用translateText,通过then链串联异步操作:
ImagesNames.forEach((element) => { detecText(element) .then((detectedText) => { // 将识别出的文本传入翻译函数 return translateText(detectedText); }) .then((translatedText) => { console.log(`图片${element}处理完成:`); console.log(`识别文本:${detectedText}`); console.log(`翻译结果:${translatedText}`); }) .catch((err) => { console.log(`处理图片${element}出错:`, err); }); });
方案2:用async/await+for...of优化代码可读性
forEach不支持异步阻塞,改用for...of循环可以让代码逻辑更清晰:
async function processAllImages() { for (const filename of ImagesNames) { try { // 先识别图片文本 const detectedText = await detecText(filename); // 再翻译识别结果 const translatedText = await translateText(detectedText); console.log(`图片${filename}:`); console.log(`识别文本:${detectedText}`); console.log(`翻译结果:${translatedText}`); } catch (error) { console.log(`图片${filename}处理失败:`, error); } } } // 执行处理函数 processAllImages();
方案3:并行处理所有图片(提高效率)
如果希望同时处理所有图片,用Promise.all批量发起异步请求:
async function processImagesInParallel() { // 为每个图片生成异步处理Promise const taskPromises = ImagesNames.map(async (filename) => { try { const detectedText = await detecText(filename); const translatedText = await translateText(detectedText); return { filename, detectedText, translatedText }; } catch (error) { return { filename, error }; } }); // 等待所有任务完成 const allResults = await Promise.all(taskPromises); // 遍历输出结果 allResults.forEach(result => { if (result.error) { console.log(`图片${result.filename}处理失败:`, result.error); } else { console.log(`图片${result.filename}:`); console.log(`识别文本:${result.detectedText}`); console.log(`翻译结果:${result.translatedText}`); } }); } processImagesInParallel();
注意事项
- 确保
detecText在识别失败时会抛出错误,这样catch块才能捕获异常 - 根据翻译需求调整
translateText的返回值:若需多文本翻译结果,直接返回translations数组即可 - 并行处理时要注意API的调用频率限制,避免触发服务端限流
内容的提问来源于stack exchange,提问作者kate moss
相关产品推荐
相关产品推荐

