我有一个async函数,它接受auth方法作为参数,并使用auth方法作为登录选项。
Sonarcloud在handleAuthorisationOnClick函数上抛出以下错误
Promise-returning function provided to attribute where a void return was expected.
const handleAuthorisationOnClick = async (authMethod: string): Promise<void> => {
loginWithRedirect({
connection: authMethod,
...
});
};
我将handleAuthorisationOnClick作为prop传递给模态组件AuthorisationModal
<AuthorisationModal
onAuthMethodSelected={handleAuthorisationOnClick} <----- Sonarcloud error
...
AuthorisationModal通过auth方法进行Map,并将auth方法作为参数传递给onAuthMethodSelected
const AuthorisationModal = ({onAuthMethodSelected}) => (
{methods.map((connectionName: string) => (
<Button
onClick={() => onAuthMethodSelected(connectionName)}
>
{methods.label}
</Button>
))}
...
1条答案
按热度按时间sr4lhrrt1#
Sonarcloud警告您一个潜在的bug:你传递了一个返回promise的函数给一些在调用这个函数时不期望收到promise的东西。这个警告很有用,因为这是一个常见的错误。当调用者不使用promise时,最好不要将返回promise的函数(包括
async
函数)作为回调传递。如果调用者不期望一个promise,它就不会处理promise rejection,这可能会导致程序中出现未处理的rejection错误。如果函数异步工作确实没问题,那么将其 Package 在一个非
async
函数中,该函数将 * 处理promise rejection(理想情况下,通过向用户报告错误),并将 that 函数传递给不期望处理promise的代码。Package 纸的大致草图: