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

ESLint报错:Array forEach迭代中函数返回Promise预期返回void如何修复

错误原因
  • 直接原因:Array.prototype.forEach 的回调函数预期返回 void 类型,而你传入的 async 函数默认返回 Promise 实例,不符合类型要求,因此触发 ESLint 报错。
  • 隐藏逻辑缺陷:forEach 不会等待异步回调执行完成,执行到 return Promise.all(answer) 时,文件的异步处理逻辑还未执行,answer 数组大概率为空,最终返回结果不符合预期。另外原代码还存在变量名不一致的问题(声明的是 result,实际用的是 answer)。
修复代码
export async function createDataFromFiles(inputFiles: File[]): Promise<Data[]> {
  // 用map收集所有异步处理的Promise实例
  const processingPromises = inputFiles.map(
    async (file) => {
      const imageData = new DataView(await file.arrayBuffer());
      const blobUrl = URL.createObjectURL(new Blob([imageData]));
      try {
        const dimension = await getDimensionsFromImageUrl(blobUrl);
        // 处理成功返回有效数据
        return { imageData, dimension };
      } catch (e) {
        // 捕获异常,打印日志,返回null作为失败标记
        console.error(`文件${file.name}处理失败:`, e);
        return null;
      } finally {
        URL.revokeObjectURL(blobUrl);
      }
    }
  );

  // 等待所有异步任务执行完成,过滤掉失败的 null 项
  const allResults = await Promise.all(processingPromises);
  return allResults.filter(Boolean) as Data[];
}
调整说明
  • 把 forEach 替换为 map,将每个文件的异步处理逻辑转换为独立的 Promise 存入数组,符合异步操作的执行规范,也解决了 ESLint 的返回类型不匹配问题
  • 新增 catch 分支捕获单个文件的处理异常,打印日志后返回 null 标记,实现跳过异常文件的需求
  • 先等待所有异步任务执行完成再过滤有效结果,保证返回数据的完整性
  • 修正了原代码变量名不一致的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:02