AngularFire 2 v5如何检索一次数据?

时间:2017-10-23 11:10:12

标签: javascript firebase firebase-realtime-database angularfire2

我试图从firebase中提取一次数据。 使用此代码,它可以实时订阅和监视更改并更新值。

this.profileData = this.fire.authState.switchMap(auth => this.db.object(`profile/${auth.uid}`).snapshotChanges().map(action => {
      const $key = action.payload.key;
      const data = { $key, ...action.payload.val() };
      return data;

    })).subscribe(profile => {

      this.profileData = profile;


      console.log(this.profileData.username); // this is working.

    });

我正在尝试这样的事情,但它不起作用

this.profileData = this.fire.authState.switchMap(auth => this.db.object(`profile/${auth.uid}`)).take(1).subscribe(profile =>{

console.log(profile.username);

}));

2 个答案:

答案 0 :(得分:0)

当您使用自己的观察者时,您必须关心取消订阅。

Angular组件有很多生命周期钩子,比如ngOnInit,ngOnChange等。你还有函数ngOnDestroy,良好的做法就是取消订阅你的observables。

我认为,如果您只想获取数据一次,最好的选择就是调用取消订阅的功能。在这里,您可以获得有关以下内容的更多信息:Angular/RxJs When should I unsubscribe from `Subscription`

答案 1 :(得分:0)

可能的解决方案是获取订阅并在收到值后取消订阅

let subs$ = this.fire.authState.switchMap(auth => 
 this.db.object(`profile/${auth.uid}`).snapshotChanges().map(action => {
  const $key = action.payload.key;
  const data = { $key, ...action.payload.val() };
  return data;

})).subscribe(profile => {

  this.profileData = profile;
  subs$.unsubscribe()



  console.log(this.profileData.username); // this is working.

});