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

SonarLint提示非Promise上冗余await告警,async函数调用为何触发该警告

排查方案

这个告警本质是SonarLint静态分析时对返回值类型推导异常导致的,结合你提供的代码场景,按优先级从高到低排查即可:

  • 优先检查类型标注错误
    如果你是TypeScript项目,确认checkKey的返回值类型有没有被错误标注为boolean,async函数的返回值必须标注为Promise<boolean>,错误的返回值类型标注会直接触发该告警。
    如果你是带JSDoc注释的JS项目,确认checkKey的JSDoc返回值标注有没有写错,正确写法是/** @returns {Promise<boolean>} */,如果标注成/** @returns {boolean} */也会让SonarLint误判。
  • 验证是否为SonarLint版本bug
    旧版本SonarLint存在对async箭头函数返回值推导的已知缺陷,你可以先做运行时验证:
    const validkeyPromise = checkKey(key);
    console.log(validkeyPromise instanceof Promise); // 打印true则说明运行时完全正常,是linter误判
    const validkey = await validkeyPromise;
    
    如果确认是误判,可升级SonarLint到最新版本,或者把async箭头函数改为普通函数声明规避:
    async function checkKey(key) {
      const result = await pool2.query(`SELECT * from "tb_keys" where key='${key}'`);
      return result.rowCount > 0;
    }
    
    不想改代码也可以加单行注释忽略该告警:// NOSONAR 或者对应规则的disable注释。
  • 额外注意SQL注入风险
    你当前的SQL写法直接拼接用户输入参数,存在严重SQL注入漏洞,建议改为pg的参数化查询写法:
    const result = await pool2.query('SELECT * from "tb_keys" where key=$1', [key]);
    

内容的提问来源于stack exchange,提问作者Ian Marett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:54:00