我有一个返回这样的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内部只有一个等待的代码中其他部分的相同问题,但是在我的用例中,我真的不知道如何重构代码以避免这种错误。欢迎任何建议
答案 0 :(得分:1)
您不需要自己创建新的诺言,因为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
函数内部,以捕获和处理在执行此函数期间可能发生的任何错误。