2016-04-17 12 views
1

Firebaseをバックエンドとして使用してReactで何らかの認証を行っています。変数に割り当てられたとき関数が未定義

ユーザーは、私が期待するように動作しているが存在する場合、私はチェックする機能を持っている:

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

私はそれがUIDを渡す呼び出すと、ユーザーが存在しているかいない場合は、コンソールに書き込みます。

this.checkIfUserExists(userId); 

私は、ユーザーがログインまたはいないが、このような何かをしようとすると、常に「いいえユーザーを」印刷されませんされているかどうかのブール表現を取得したいです。

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

i "が未定義の" コンソール出力

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

にしよう。

これは間違った方法ですか?なぜそれは未定義ですか?

答えて

1

内部関数内のreturn文は、外部関数を通じて値を返しません。代わりにありがとうこの

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

のような機能を送信してみてください!それは理にかなっている。私は今コールバックの概念を把握し始めています。 –

関連する問題