【发布时间】:2021-11-04 04:05:49
【问题描述】:
在符号表实现中我有这个方法:
public getAllSymbols(type?: typeof Symbol, localOnly = false): Promise<Set<Symbol>> {
const promise = super.getAllSymbols(type ?? Symbol, localOnly);
return new Promise(async (resolve, reject) => {
try {
let result = await promise;
if (!localOnly) {
this.dependencies.forEach(async (dependency) => {
result = new Set([...result, ...await dependency.getAllSymbols(type, localOnly)]);
});
}
resolve(result);
} catch (reason) {
reject(reason);
}
});
}
效果很好,但是 ESLint 报告了 2 个承诺滥用:
在函数参数中返回的 Promise 预期返回 void。
no-misused-promises
这段代码有什么问题,我必须如何编写它才能摆脱 linter 错误?
【问题讨论】:
-
可以想象问题在于执行器函数现在返回一个承诺(因为它被声明为异步),forEach 参数也是如此。这些函数都不应该返回任何东西。
-
我没有看到返回,除了函数返回的那个。看看eslint error description 就是我自己做的一个例子。
-
eslint错误描述告诉你,你的代码会报错——它是在错误代码的例子下。使函数异步自动将返回值包装在 Promise 中——即使你的函数中没有 return 语句——在这种情况下,它将返回 Promise
......你总是可以等待异步函数。跨度>
标签: javascript eslint