开发者问题收集

异步方法始终返回 true

2022-02-24
195

我正在使用 firebase 和 React Native 实现登录功能。 handleLogin 方法始终返回 succeed() 。如果我删除 success() ,我会得到:

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating 'result2.failed')]

export default async function login(credentials) {
    let result2= succeed();
    result2 = await handleLogin(credentials.email, credentials.password);
    if(result2.failed()){
       return fail({password: "Login failed"});
    }
    else{          
       return succeed();
    } 
}

const handleLogin = async(email,password) => {
    auth.signInWithEmailAndPassword(email, password)
    .catch(function(error) { 
         console.log(error); 
         return fail("failed");
     })

     return succeed(); // or fail() in which case method always returns fail()

我也尝试过使用 .then() ,但如果我在 handleLogin() 末尾不返回 succeed()fail() ,我会一直收到对象未定义错误:

auth.signInWithEmailAndPassword(email, password)
    .then(function(){return succeed();})
    .catch(function(error) { 
        console.log("we fail"+error); 
        return fail("failed");
    })
2个回答

这是 Firebase 的一个已知问题。我在 angular 代码上也遇到过类似的事情。

Hrushikesh Sawant
2022-02-24

我通过添加返回语句解决了该问题:

return auth.signInWithEmailAndPassword(email, password).then(function(){return succeed();}).catch(function(error) { return fail("Login Attempt Failed\n"+error);})
shardul
2022-02-24