javascript - Array forEach 迭代的 Eslint 错误:在预期返回 void 的函数参数中返回 Promise
问题描述
我正在尝试编写一个函数来对不抛出任何异常的文件进行转换,如下面的方法。我看到 ESLint 错误 - “Eslint:Promise 在函数参数中返回,其中预期返回 void。”。可以做些什么来修复这个 eslint?
请注意,我们将跳过会引发错误的文件。但是,这些已适当记录。
export async function createDataFromFiles(inputFiles: File[]): Promise<Data[]> {
const result: Data = [];
inputFiles.forEach(
async (file) => {
const imageData = new DataView(await file.arrayBuffer());
const blobUrl = URL.createObjectURL(new Blob([imageData]));
try {
const dimension = await getDimensionsFromImageUrl(blobUrl);
answer.push({ imageData, dimension });
} finally {
URL.revokeObjectURL(blobUrl);
}
}
);
return Promise.all(answer);
}
解决方案
这是因为签名Array.forEach
:
forEach(callbackfn: (value: undefined, index: number, array: undefined[]) => void): void
.
callbackFn
具有类型void
,但在使用该async
函数时隐式返回 a Promise
。
您可以通过使用普通for...of
循环来避免此警告:
export async function createDataFromFiles(inputFiles: File[]): Promise<Data[]> {
const result: Data = [];
for (const file of inputFiles) {
const imageData = new DataView(await file.arrayBuffer());
const blobUrl = URL.createObjectURL(new Blob([imageData]));
try {
const dimension = await getDimensionsFromImageUrl(blobUrl);
answer.push({ imageData, dimension });
} finally {
URL.revokeObjectURL(blobUrl);
}
}
return Promise.all(answer);
}
推荐阅读
- javascript - Javascript中的二进制到图像
- java - 菜鸟问题 - 我可以编写一个脚本来为我们的内部云软件执行操作吗?
- reactjs - 为什么我的吐司出现两次?Console.log 只运行一次
- reactjs - 使用直接粘贴在下一个js的搜索栏中的参数访问url
- android - 如何在 Kotlin 中实现一个可以处理不同大小单元格的回收器视图?
- javascript - 将“API”属性作为对象添加到 DOM 元素作为 element.API
- php - 在 PHP 中查找未知多级数组中的键的值
- mysql - Mysql 不返回具有 NULL 值的记录
- java - 如何在页面呈现后从 th:each 获取项目的值,以便将其作为请求参数发送(不使用 js)?
- java - 尝试在 Selenium Java 中制作屏幕截图时获取 NPE