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箭头函数返回值推导的已知缺陷,你可以先做运行时验证:
如果确认是误判,可升级SonarLint到最新版本,或者把async箭头函数改为普通函数声明规避:const validkeyPromise = checkKey(key); console.log(validkeyPromise instanceof Promise); // 打印true则说明运行时完全正常,是linter误判 const validkey = await validkeyPromise;
不想改代码也可以加单行注释忽略该告警: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
相关产品推荐
相关产品推荐

