按顺序运行的Javascript代码
我的JS代码运行不正常,有问题。当出现错误时,它会在执行catch之前跳过按顺序运行的Javascript代码,javascript,ajax,firebase,firebase-authentication,Javascript,Ajax,Firebase,Firebase Authentication,我的JS代码运行不正常,有问题。当出现错误时,它会在执行catch之前跳过if(!haderro),以便haderro始终等于true。我知道它与javascript以及它如何同时运行有关,但我不知道如何修复它。 代码如下: var email = $('#email').val(); var password = $('#password').val(); var hadError = false; // var unlocked = false; if(email != "" &&
if(!haderro)
,以便haderro始终等于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();
}
}
Firebase方法是异步的,返回
Promise
。您可以在方法调用后执行.then()以在承诺返回后执行代码,例如
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);
});
根据方法的不同,您甚至可能不需要检查haderro
供进一步参考:
在某些情况下,您可以将第二个方法传递给,然后在Promise
被拒绝时调用该方法,但对于Firebase,API引用的方法是catch
,用于错误处理