我的JS代码没有按顺序运行。当出现错误时,它会在执行catch之前跳到if(!hadError)
,这样hadError总是等于true。我知道是与javascript有关,它是如何同时运行的,但我不知道如何解决它。
这是代码:
var email = $('#email').val();
var password = $('#password').val();
var hadError = false;
// var unlocked = false;
if(email != "" && password != ""){
auth.signInWithEmailAndPassword(email, password).catch(function(error) {
// console.log(hadError);
hadError = true;
console.log(hadError);
var errorCode = error.code;
var errorMessage = error.message;
$('#login-error').text(errorMessage);
// unlocked = true;
});
if(!hadError){
success();
}
}
答案 0 :(得分:2)
Firebase方法是异步的,并返回Promise
。您可以在方法调用之后执行.then()on,以在返回Promise之后执行代码,例如。
auth.signInWithEmailAndPassword(email, password).then((user) => {
//if you want, do something with the `user` which is a firebase.User
if(!hadError) success();
}).catch(function(error) {
hadError = true;
console.log(hadError);
var errorCode = error.code;
var errorMessage = error.message;
$('#login-error').text(errorMessage);
});
根据方法的不同,您甚至无需查看hadError
。
供进一步参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
在某些情况下,如果then
被拒绝,您可以将第二种方法传递给Promise
,但对于Firebase,API引用的方法为catch
以进行错误处理。