2017-09-11 34 views
1

私のJSコードが問題なく実行されています。 hadErrorが常にtrueになるようにエラーが発生したときにキャッチを実行する前に、if(!hadError)にスキップします。私はjavascriptと関係があり、どのように同時に物事を実行するのか知っていますが、それを修正する方法がわかりません。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(); 
    } 
} 

答えて

2

Firebase方法は非同期であり、Promise年代を返す: は、ここでは、コードです。 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); 
}); 

方法によっては、hadErrorもチェックする必要はありません。さらに参考のために

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

は、いくつかのケースでは、Promiseが拒否された場合に呼び出されthenに第二の方法を渡すことができますが、FirebaseためのAPIが参照する方法は、エラー処理のためcatchです。

関連する問題