【发布时间】:2020-07-24 00:13:27
【问题描述】:
我正在尝试使用 Angularfire 和 Firebase 实时数据库进行非常简单的 CRUD 操作。这是我的 Angular 服务正在做的事情:
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
@Injectable({
providedIn: 'root'
})
export class FirestoreService {
constructor(private db: AngularFirestore) { }
public getUser(userid: string) {
return this.db.collection('users').doc(userid).valueChanges();
}
}
我正在尝试以下列方式使用它。在这个 sn-p this.userid 是一个公共全局 Subject<string>。我检查过,它在以下 sn-p 中提供了正确的用户 ID。
this.userid.pipe(filter(x => !!x))
.subscribe(userid => {
this.firestoreService.getUser(userid)
.subscribe(result => {
console.log(result);
});
});
与预期相反,控制台输出不是所请求文档(存在)的干净的 JSON,而是大量的原始 JSON 数据。
这有两个奇怪的地方。
-
如果我将
snapshotChanges()更改为valueChanges(),结果就是我预期的数据。 -
如果我将订阅移到
userid订阅之外,结果又是正确的。 -
但这是最奇怪的。如果我重复订阅...
this.userid.pipe(filter(x => !!x))
.subscribe(userid => {
this.firestoreService.getUser(userid)
.subscribe(result => {
console.log('----[ DATABASE RESULT ]----');
console.log(result);
});
this.firestoreService.getUser(userid)
.subscribe(result => {
console.log('----[ DATABASE RESULT 2 ]----');
console.log(result);
});
})
...然后两个都将返回正确的数据库结果,而不是那么大的奇怪 JSON。
欢迎提出想法、建议。
【问题讨论】:
标签: angular firebase rxjs angularfire