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
相关产品推荐
相关产品推荐

