声纳显示以下代码错误,我不知道如何修复它。有谁知道这是否是规则的例外或者我该如何重构它?
错误:在函数参数中返回了 Promise,而预期返回的是 void
错误描述:
Promise 需要被解析或等待才能返回预期值,否则,它们返回 Promise 对象。
未兑现的承诺:
忘记等待承诺是一个常见的错误。有些地方 Promise 对象的使用令人困惑或不清楚,因为开发人员忘记解决它。
此规则禁止返回需要其他类型的承诺,例如:
条件句 无效退货 传播运算符
代码:
return new Promise(async (resolve) => {
await Promise.all(promises).finally(async () => {
await Storage.clearSession();
await Storage.clearToken();
});
resolve("success");
});
我已经尝试了 Sonar 的建议修复,但这些修复要么导致我的测试中断,要么没有解决错误。
您需要正确输入您的包装函数。您将 void 作为返回类型,但它需要未定义:
function yourFunction(promises: Promise<unknown>[]): void {
// fails because your above return type is void and not Promise<string>
return new Promise(async (resolve) => {
await Promise.all(promises).finally(async () => {
await Storage.clearSession();
await Storage.clearToken();
});
resolve("success");
});
}
要解决此问题,只需更改您的类型:
// since we return undefined our return type must be undefined
async function yourFunction(promises: Promise<unknown>[]): Promise<undefined> {
await new Promise(async (resolve) => {
await Promise.all(promises).finally(async () => {
await Storage.clearSession();
await Storage.clearToken();
});
resolve("success");
});
// in TS, return is always going to return undefined
return;
}
执行上述逻辑的另一种更清晰的方法:
// since we return undefined our return type must be undefined
async function yourFunction(promises: Promise<unknown>[]): Promise<undefined> {
await Promise.allSettled(promises);
await Storage.clearSession();
await Storage.clearToken();
// in TS, return is always going to return undefined
return;
}