2016-11-30 19 views
1

私はAngularfire2でAngular2アプリを作っています。私はFirebaseからデータを取得する際にFirebaseListObservableに関する問題に悩まされています。ここに私のコードです。この後すぐにFirebaseListObservableの応答を待つ方法

this.requests = this._af.database.list('/requests');

、私はこの変数をログに記録。

console.log(this.requests);

それから私は、未定義の1つを得たが、私はthis.requestsは常にこのコードで未定義されたため、この要求の応答を待機するように望んでいました。私は、あなたがfirebaseの要求の結果を待つ方法を私に教えてほしい。私の貧しい英語を残念に思います。

答えて

0

listメソッドはObservableを返すので、それを購読して返された要求を取得できます。

export class AppComponent { 
    requests: FirebaseListObservable<any[]>; 

    constructor(private af: AngularFire) { 

    } 

    ngOnInit() { 
     this.requests = this.af.database.list('/requests'); 

     this.requests.subscribe(
     (requests) => { 
      console.log(requests) 
     }, 
     err => console.log(err) 
    ); 
    } 
    } 
+0

ありがとうございます。もう質問があります。 ngOnInitで要求をコンストラクタよりも呼び出すほうが良いですか?私はコンストラクタがngOnInitの前に呼び出されたことを学びました。私はいつ使うかを決めることができません。あなたが好きなら、私はあなたがこれに答えることを願っています。 – taku845

+0

@タク。それは良い練習です、もっと見るために[this](http://stackoverflow.com/questions/35763730/difference-between-constructor-and-ngoninit)のスレッドを見てください。 – JayChase

+0

ありがとう!私はそれを見ます。 – taku845

2

further problemsを避けるために、もはや使用されていません後Firebaseからデータを取得することは非同期であるので、要求されたデータが入って来たとき、あなたはイベントに「購読」する必要があります。(退会)接続を閉じることが重要です。これは、次のコードで実現することができます。

this.requests = this._af.database.list('/requests') 
    .subscribe(data => { 
    data.forEach(obj => { 
     console.log(obj.$key); 
     console.log(obj.$value); 
    }); 
    this.requests.unsubscribe(); 
}); 

あなたがあなたのデータを更新しているので、接続を維持したい場合は、this.requests.unsubscribe();を省略しなければならないし、むしろそう、あなたのコンポーネントに

ngOnDestroy(){ 
    this.requests.unsubscribe(); 
} 

を置きますコンポーネントが破棄されたときに接続が閉じられます。

+0

コメントありがとうございます。私はこのアンサブスクライブ方法を知らなかったので、私はそれを使って接続を閉じる方法を学ぶつもりです。 – taku845

関連する問題