0

これは簡単なことかもしれませんが、私はAngularでこの問題に遭遇しました。少し説明が必要です。私がしようとしているのは、スナップショット機能の外で可変の値を得ることだけです。私はこのスナップショット以外の変数firebase Angular

let testVariable : string; 

var testCount = firebase.database().ref('users/' + userName + '/userName'); 

testCount.on('value', function (snapshot) { 

testVariable = snapshot.val(); 


}); 

alert(testVariable); //comes out undefined 

ような何かを行うことができれば、あなたに

答えて

0

ありがとう問題はあなたのコードが非同期で実行されています。これは、javascriptがfirebaseの呼び出しを行い、応答を待たずにただちにalert関数を呼び出すことを意味します。あなたのアラートは、コールバックに置くか、変数が設定された後に呼び出さなければなりません。

"this"を使用している場合は、この機能にアクセスする際に問題が発生することがあります。もしそうなら、このような矢印に関数の構文を変更します。

testCount.on('value', (snapshot) => { 

    this.testVariable = snapshot.val(); 


}); 
+0

これは私がどこかに警告(testVariable)と呼ばれる場合、それは、その後、変数を持つことになりますので、それは未定義のではないでしょうよりも、ということですか?どこに警報を置くことができますか?あなたは私にコールバックを少し説明することができます、私はそれを探してみましたが、私は十分な特定のものを見つけることができません。 –

+0

関数では、testCountを実行します。この関数は実行され(firebaseからの応答を取得)、コールバック関数(スナップショット関数)を起動します。コールバックは、非常に基本的に、次のことを行う前に何か他のことが起こるのを待つようにjsに指示するときです。 alert()関数をtestVariable = snapshot.val()の直下に移動してみてください。 – Notmfb

+0

ここに私の問題があります。 navController.pushを使う必要がありますが、testCountの内部では動作しません(定義されていません)が、その外側で動作します。私はその関数の中に入れることができないことがわかっているコードがたくさんあるので、可能であれば変数値でそれを抜け出す方法が必要です。私はそれを直接下に設定すると、それはtestCountの中にあります –

関連する問題