2017-09-11 1 views
1

Ich habe Probleme mit meinem JS-Code läuft nicht in der Reihenfolge. Es überspringt die , bevor es den Catch bei einem Fehler ausführt, so dass HadError immer gleich True ist. Ich weiß, dass es mit Javascript zu tun hat und wie es die Dinge gleichzeitig ausführt, aber ich bin nicht sicher, wie ich es beheben kann. Hier ist der Code:Javascript-Code läuft in Reihenfolge

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

Antwort

2

Firebase Methoden sind asynchron und das Rück Promise ‚s. Sie können nach dem Methodenaufruf eine .then() -Option ausführen, um nach der Rückgabe des Versprechens einen Code auszuführen, z.

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); 
}); 

Je nach Methode können Sie nicht einmal brauchen hadError zu überprüfen.

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

In einigen Fällen können Sie eine zweite Methode then geben, wenn die Promise genannt wird abgelehnt, aber für Firebase der Methode, die die API bezieht, ist catch für die Fehlerbehandlung.

Verwandte Themen