You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码运行正常但ESLint报no-misused-promises错误,该如何修复?

问题原因
  • 第一个错误来自你给Promise构造函数传入了async修饰的executor回调:Promise构造器会忽略executor的返回值,你传入async函数时它返回的Promise会被直接丢弃,既不符合no-misused-promises的规则,同时这里手动包装Promise属于冗余写法。
  • 第二个错误来自你给forEach传入了async回调:forEach方法不会处理回调返回的Promise,只会同步执行所有回调就立刻返回,除了触发linter报错外,你的代码还存在隐藏逻辑bug——你调用resolve(result)的时候,依赖的异步查询请求大概率还没执行完成,result并没有合并到依赖的符号数据,你觉得运行正常只是测试场景下异步请求响应快导致的巧合。
修改方案

直接将方法改写为async方法,同时把forEach替换为for...of串行执行,或者用Promise.all并发执行依赖查询,等所有异步操作完成后再返回结果,即可同时解决linter报错和隐藏的逻辑问题。

以下是优化后的代码示例(并发版本,性能更优):

public async getAllSymbols(type?: typeof Symbol, localOnly = false): Promise<Set<Symbol>> {
    let result = await super.getAllSymbols(type ?? Symbol, localOnly);

    if (!localOnly) {
        // 并发请求所有依赖的符号
        const depSymbolList = await Promise.all(
            this.dependencies.map(dependency => dependency.getAllSymbols(type, localOnly))
        );
        // 合并所有依赖的查询结果
        for (const depSymbols of depSymbolList) {
            result = new Set([...result, ...depSymbols]);
        }
    }

    return result;
}

如果需要按顺序串行执行依赖查询,可以把依赖处理部分替换为for...of写法:

if (!localOnly) {
    for (const dependency of this.dependencies) {
        const depSymbols = await dependency.getAllSymbols(type, localOnly);
        result = new Set([...result, ...depSymbols]);
    }
}

内容的提问来源于stack exchange,提问作者Mike Lischke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:12:01