异步承诺执行器功能

问题描述

我有一个返回这样的Promise的函数

async function processFolder(folder) {
    return new Promise(async (res) => {
        const table = {};
        const list = await getHTMLlist(folder);
        if (list.length === 0) res(table);
        for (let i = 0; i < list.length; i++) {
            await processFile(folder,list[i],table);
        }
        res(table);
    });
}

我正在使用警告我的ESLint:

Promise执行器功能不应异步”,这是 no-async-promise-executor 规则,由于Promise声明中的async关键字而引发错误

我已经使用ESLint文档的this页上建议的技术在this答案中解决了Promise内部只有一个等待的代码中其他部分的相同问题,但是在我的用例中,我真的不知道如何重构代码以避免这种错误。欢迎任何建议

解决方法

您不需要自己创建新的诺言,因为async函数始终会返回诺言。如果async函数的返回值不是Promise,则将其隐式包装在Promise中。

因此,您需要删除创建新的Promise实例的代码,执行程序函数内的代码应位于processFolder函数的顶层。

您的代码可以简化,如下所示:

async function processFolder(folder) {
    const table = {};
    const list = await getHTMLlist(folder);

    if (list.length > 0) {
       for (let i = 0; i < list.length; i++) {
           await processFile(folder,list[i],table);
       }
    }

    return table;
}

理想情况下,您还应该将代码包装在processFolder函数的try-catch函数内部,以捕获和处理在执行此函数期间可能发生的任何错误。