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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:45:38