Sonar 问题 - 在函数参数中返回 Promise,而预期返回 void

问题描述 投票:0回答:1

声纳显示以下代码错误,我不知道如何修复它。有谁知道这是否是规则的例外或者我该如何重构它?

错误:在函数参数中返回了 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 的建议修复,但这些修复要么导致我的测试中断,要么没有解决错误。

node.js typescript async-await promise sonarqube
1个回答
-1
投票

您需要正确输入您的包装函数。您将 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.