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

Sonar报错:预期返回void的函数参数中返回Promise,求修复方案

问题分析与修复方案

错误原因

Sonar抛出的Promise returned in function argument where a void return was expected错误,核心问题有两个:

  • 你给Promise.finally()传递了async回调函数,该回调会返回Promise,但finally的回调被预期返回void,未处理的Promise触发了规则告警;
  • 代码存在new Promise(async (resolve) => {})的反模式:async函数本身就返回Promise,手动包裹一层不仅冗余,还容易遗漏错误处理。

重构后的代码

直接用async函数替代手动创建Promise的写法,改用try/finally块处理清理操作,彻底解决规则告警:

async function yourFunctionName() {
  try {
    await Promise.all(promises);
  } finally {
    await Storage.clearSession();
    await Storage.clearToken();
  }
  return "success";
}

重构说明

  • 去掉new Promise冗余包裹:async函数自动返回Promise,内部await会正确处理异步流程,无需手动调用resolve;
  • 用try/finally替代Promise.finally():避免了将async函数作为参数传递的场景,finally块内的await会等待清理操作完成,既符合规则要求,又完整保留原逻辑——不管Promise.all(promises)成功或失败,都会执行清理,最后返回"success"。

原修复方案失效原因

如果直接在Promise.finally()回调前加await,或把回调改成非async,要么破坏"等待清理完成"的逻辑,要么导致清理操作异步未等待,进而触发测试用例失败。上述重构既满足Sonar规则,又完整保留业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:32:45