Executando verificação de segurança...
1

No entanto, dependendo da api, esse catch(err) ele não pega corretamente dependendo do erro de retorno da api.

Então sugiro você verificar bem os erros de retorno e tratar ele para que o catch possa pegar corretamente.

Este retorno abaixo é uma api onde efetuo reset de senha do usuário, não uso try/catch e sim envio o fetch para api e ele tem um retorno res.ok

const errorMessages: ErrorMessage = {
      'The provided current password is invalid':
        'A senha atual fornecida é inválida',
      'password must be at least 6 characters':
        'A senha deve ter pelo menos 6 caracteres',
      'Your new password must be different than your current password':
        'Sua nova senha deve ser diferente da sua senha atual.',
    }
    
    const res = await fetch(
      '/api/auth/reset-password',
      {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          code,
          password,
          passwordConfirmation: confirmPassword,
        }),
      },
    )

   if (!res.ok) {
      const data = await res.json()
      const translatedMessage = errorMessages[data.error.message]
      return
    }
    
    startTransition(() => {
      router.push('/login')
    })

Como a api não retorna em portugues eu tenho essa validação trocando os texto em ingles pelos textos em portugues! Funciona bem aqui para min! Nesse caso o try/catch mas em outros lugares do meu sistema eu usei eles de boa!

Já em outro lugar no site eu uso try/catch e funciona numa boa, desde que eu configure para ele exibir a mensagem para usuário que ouve algum problema!

    try {
      const { jwt, user } = await loginUser({identifier, password})
      const userId = user?.id.toString()
      document.cookie = cookie.serialize('jwt', jwt, {
        path: '/',
        maxAge: 30 * 24 * 60 * 60,
      }) // Set the cookie to expire in 30 days
      setSuccessMessage('Login bem-sucedido! Redirecionando...')
      setTimeout(() => {
        router.push('/academy/dashboard/')
      }, 100)
     } catch (err) {
      console.log(err)
      if (err instanceof Error) {
        setError(err.message)
      } else {
        setError('An unknown error occurred')
      }
    }