2017-01-15 13 views
5

私はFirebaseからAngularFire2でデータを取得しようとしています。 特定のデータを確認したいのですが、このデータをFirebaseから取得した後、Firebaseの操作後ではなく、特定の有効範囲内でのみチェックすることができます。それはなぜ起こるのですか?以下はAngularFire2はデータを取得した後にデータにアクセスします

私のコードです:

this.af.database.list('/users/1qfcMAQnglX9jsW5GdLpPko1HqE2', { preserveSnapshot: true}) 
.subscribe(snapshots=>{ 
    snapshots.forEach(snapshot => { 
     if(snapshot.key=="reg_boolean"){ 
     console.log(snapshot.val()); 
     this.bo=snapshot.val(); 
     } 
     this.currentUser.push({key:snapshot.key,value:snapshot.val()}); 
     console.log(this.currentUser); 
     //console.log(snapshot.key, snapshot.val()); 
     if(this.bo==true){console.log("happy"); }; //i can access only in this scope 
    }); 

}) 
if(this.bo==true){console.log("happy"); }; //why i can access this value??it's undefined, this happen before the subscribe with angularfire2 

enter image description here

+1

ビクターの答えは説明するが、私はまた、これらの参照の質問にあなたを呼びます:[?私は非同期呼び出しからの応答を返すにはどうすればよい](http://stackoverflow.com/q/14220321 /)、[$ .getJSON関数中に設定された変数は関数内でしかアクセスできません](http://stackoverflow.com/q/1739800)と[jQuery:ajax呼び出しの成功後のデータを返す](http://stackoverflow.com/1/5316697)。 –

答えて

8

それはthis.af.database.listは、データを取得したときにそうsubscribeでコードが実行される非同期だthis.af.database.listので、それは未定義です。だからコードが行に来たときif(this.bo==true){console.log("happy"); };サブスクリプションがまったく完了しなかったので何もありません。

それは古い約束のようですが、今はrxjsと一緒に働いています。私はそれを学ぶことをお勧めします。角とイオンはそれに重点を置いているからです。

https://www.learnrxjs.io/を見てみ

+0

ビクターあなたは今私のための解決策がありますか?何かこの問題を解決することができますか? rxjsの使い方がわからないからです。 –

+0

@AdirZoariデータで何をしたいですか? –

+0

大丈夫です。最初にサインアップした後、彼はアカウントを作成し、必要なすべてのデータ(部署名、年)を記入するために記入し、私はreg_booleanをtrueに設定します。次回にアプリケーションに入ると、reg_booleanがtrueだから彼は部門名と年を再度選ぶ必要はないので、ホームページに移動しサインアップしない。 –

関連する問題