Possible Unhandled Promise Rejection (id: 0): ReferenceError: error is not defined

Possible Unhandled Promise Rejection (id: 0): ReferenceError: error is not defined

//LoginScreen.js

import signIn from "amplify-communication"
    
  const LoginScreen = props => {
    function _signIn(username, password){
        const request = signIn(username, password);
        if(request.isCommited)
           console.log("User is Signed In");
        else
           console.log("Error Signing In", request.message);
        
       }
    }

// amplify-communication.js
import { Auth } from "aws-amplify";
export async function signIn(_username, _password) {
    try {
        var user = await Auth.signIn(_username, _password);
    } catch (error) {
        console.log('Error Signing in');
    }
    finally {
        return {
            isCommitted: error ? false : true,
            message: error,
            payload: user
        }
    }
}

我有单独的文件用于与 Amplify 通信。我正在返回一个具有不同键的对象。 在 运行 代码中,它向我显示了以下警告。

1 - 可能未处理的承诺拒绝(id:0): ReferenceError:错误未定义 ReferenceError:错误未定义

2- 使用不安全的随机数生成器,只有在不支持 crypto.getRandomValues

的调试器中 运行 时才会发生这种情况

error 仅作用于 catch 块,因此当您尝试在 finally 块中使用 error 时,它是一个未声明的标识符。您在成功路径上遇到与 user 相同的问题。

相反,要么在变量中跟踪该信息,要么重复 return 语句。

export async function signIn(_username, _password) {
    try {
        const user = await Auth.signIn(_username, _password);
        return {
            isCommitted: true,
            payload: user,
            message: undefined, // if you need it, otherwise remove
        };
    } catch (error) {
        console.log('Error Signing in');
        return {
            iscCommitted: false,
            payload: undefined, // if you need it, otherwise remove
            message: error,
        };
    }
}

关于随机数生成器的事情听起来像是您正在使用的包发出的关于您 运行 代码所在环境的警告(例如,它没有强大的随机数生成器)。


旁注:可以将错误转换成这样的return值是正确的,但更多时候允许错误传播到更正确调用者(也许是它的调用者等)而不是强制每个级别检查 return 值以查看是否有效。同样,在不知道此功能的用途的情况下,可能适用也可能不适用于此处,但只需将其标记即可。