Javascript代码按顺序运行

时间:2017-09-11 01:04:47

标签: javascript ajax firebase firebase-authentication

我的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();
  }
}

1 个答案:

答案 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以进行错误处理。