首页 > 解决方案 > 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);
    }

标签: javascripttypescripteslint

解决方案


这是因为签名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);
}

推荐阅读