#javascript #typescript #eslint
Вопрос:
Я пытаюсь написать функцию для преобразования файлов, которые не создают никаких исключений, как показано ниже. Я вижу ошибку ESLint — «Eslint: Обещание, возвращенное в аргументе функции, где ожидалось возвращение пустоты». Что можно сделать, чтобы исправить эту ошибку 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);
}
Комментарии:
1. Вы могли бы использовать обычный
for ... of
цикл.
Ответ №1:
Это происходит из-за подписи 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);
}