typescript async函数:promise-为期望返回void的属性提供返回函数

3zwjbxry  于 2023-05-08  发布在  TypeScript
关注(0)|答案(1)|浏览(667)

我有一个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>
          ))}
        ...
sr4lhrrt

sr4lhrrt1#

Sonarcloud警告您一个潜在的bug:你传递了一个返回promise的函数给一些在调用这个函数时不期望收到promise的东西。这个警告很有用,因为这是一个常见的错误。当调用者不使用promise时,最好不要将返回promise的函数(包括async函数)作为回调传递。如果调用者不期望一个promise,它就不会处理promise rejection,这可能会导致程序中出现未处理的rejection错误。
如果函数异步工作确实没问题,那么将其 Package 在一个非async函数中,该函数将 * 处理promise rejection(理想情况下,通过向用户报告错误),并将 that 函数传递给不期望处理promise的代码。
Package 纸的大致草图:

const wrapper = () => {
    handleAuthorisationOnClick()
    .catch((error) => {
        // Report the error to the user
    });
};

相关问题