javascript - Eslint-fel med Array forEach-iteration: Promise returnerad i funktionsargument där ett void-returvärde förväntades
Jag försöker skriva en funktion för att göra transformationer för filer som inte kastar något undantag som en metod nedan. Jag ser ett ESLint-fel - "Eslint: Promise returned in function argument where a void return was expected." Vad kan göras för att fixa detta eslint?
Observera att vi kommer att hoppa över filerna som kommer att generera fel. De loggas dock på ett korrekt sätt.
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);
}
Svar #1
Detta beror på signaturen för Array.forEach:
forEach(callbackfn: (value: undefined, index: number, array: undefined[]) => void): void.
callbackFn har typen void, men när man använder async returnerar funktionen implicit ett Promise.
Du kan undvika denna varning genom att använda en vanlig for...of-slinga:
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);
}
