2017-06-06 13 views
-1

私はdatasnapshot内から変数にアクセスしようとしている:にconsole.logは、データベースの値を返さない、と私はまた、他の場所で私のコードでその電子メールの変数にアクセスすることができませんFirebase Javascript、ref関数の内部変数の使い方は?

getEmail() { 
    var test = firebase.database().ref('/users/' + user).once('value') 
    .then(function(snapshot) { 
     var email = snapshot.val().email; 
     }); 
     console.log(email); 
    } 

+0

が解決約束の範囲にまでログ文を移動します。 'email'はスコープ内でのみ定義されているため、そこにしかアクセスできません。 –

+1

[非同期呼び出しからの応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

それで、範囲外の電子メール値にはどのようにアクセスできますか?私が使うことができる別の火災基地機能がありますか? –

答えて

0

2の可能な解決策がある:(コメントでスターリング言及両方)

1)ログステートメントは.then方法の範囲内にない:

getEmail() { 
 
    var test = firebase.database().ref('/users/' + user).once('value') 
 
    .then(function (snapshot) { 
 
     var email = snapshot.val().email 
 
     console.log(email) 
 
    }) 
 
}

2).thenメソッドでemail変数を返し、test変数をログに記録できます。

getEmail() { 
 
    var test = firebase.database().ref('/users/' + user).once('value') 
 
    .then(function (snapshot) { 
 
     var email = snapshot.val().email 
 
     return email 
 
    }) 
 
    console.log(test) 
 
}

**)最も明確な方法は、IMO、このようなものです:

getEmail() { 
 
    var email = firebase.database().ref('/users/' + user).once('value') 
 
    .then(function (snapshot) { 
 
     return snapshot.val().email 
 
    }) 
 
    console.log(email) 
 
}

+0

console.logはPromise {_45:0、_81:0、_65:null、_54:null}オブジェクトを返します。 _65キーの下には、私が望むデータが格納されています。キーがこのように表示される理由はありますか? –

+0

JSON.stringify(email)をlogステートメントで試してください – sgraham

+0

また、私はあなたがそのような 'return snapshot.child( 'email')であると信じる電子メールキーの値にアクセスしようとしていると推測しています。 – sgraham

関連する問題