2016-04-17 6 views
1

zugewiesen ist Ich arbeite an einer Authentifizierung in Reagieren mit Firebase als Backend.Funktion undefiniert, wenn sie der Variablen

Ich habe eine Funktion zu überprüfen, ob ein Benutzer vorhanden ist, das funktioniert, wie ich erwarten:

checkIfUserExists(uid) { 
    ref.child('users').child(uid).once('value', function(snapshot) { 
    if (snapshot.exists()) { 
     console.log("User exists"); 
     return true; 
    } else { 
     console.log("User does not exist"); 
     return false; 
    } 
    }); 
} 

Als ich es vorbei eine uid nennen, wird es an die Konsole schreiben, wenn der Benutzer vorhanden ist oder nicht.

this.checkIfUserExists(userId); 

Ich möchte nur eine boolean Darstellung erhalten, ob der Benutzer angemeldet ist oder nicht, sondern versuchen, etwas zu tun, wird immer „Kein Benutzer“ drucken.

if (this.checkIfUserExists(userId)) { 
    console.log('The user does really exist'); 
} else { 
    console.log('No user');  
} 

Wenn ich versuche zu

console.log(this.checkIfUserExists(userId)); 

Die Konsole gibt "undefined".

Bin ich das in die falsche Richtung? Warum ist es undefiniert?

Antwort

1

Die Rückgabeanweisung in der inneren Funktion gibt den Wert nicht über die äußere Funktion zurück. Stattdessen versuchen Sie eine Funktion wie diese

checkIfUserExists(uid, callback) { 
    ref.child('users').child(uid).once('value', function(snapshot) { 
    callback.call(null, snapshot.exists()); 
    }); 
}; 

checkIfUserExists(uid, function(exists){ 
    if(exists){ 
    console.log("User exists"); 
    }else{ 
    console.log("User does not exist"); 
    } 
}); 

More on .call() here in documentation

+1

Sie Senden Danke! Das macht Sinn. Ich fange jetzt an, das Konzept der Rückrufe zu begreifen. –

Verwandte Themen