我试图从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);
}));
答案 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.
});