异步 Promise 执行器函数

Pla*_*tic 5 javascript promise async-await eslint

我有一个返回 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 ESLint 来警告我:

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

我已经在代码的其他部分修复了同样的问题,其中 Promise 中只有一个等待,使用ESLint 文档这一页上建议的技术并在这个答案中显示,但在我的用例中我真的不知道如何重构代码以避免该错误。有任何建议欢迎提出

You*_*saf 15

您不需要自己创建新的 Promise,因为async函数总是返回 Promise。如果函数的返回值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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 除了使用 return 解析异步函数的承诺之外,您还可以使用 throw 来拒绝它。 (3认同)