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
相关产品推荐
相关产品推荐

