如果启用了持久性,AngularFire 不会检测到更改
AngularFire doesn't detect changes if persistence is enabled
我正在使用 AngularFire 并在我的 app.module.ts
:
中启用了离线支持的持久性
imports: [
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule.enablePersistence()
]
当我的应用程序启动时,我使用 valueChanges()
检索用户,如下所示:
const doc: AngularFirestoreDocument<User> = this.myCollection.doc<User>(userId);
doc.valueChanges().pipe(take(1)).subscribe((user: User) => {
console.log(user);
}, (err) => {
console.err(err);
});
对我来说很奇怪,如果我从应用程序的另一个来源对数据库进行修改,例如,如果我将自己登录到 Google Firestore 控制台并手动修改用户数据中的值,这些不会获取数据。
如果我重新启动应用程序,它将始终获取本地持久化数据,并且永远不会注意到值已更改。
如果我分别删除持久性 enablePersistence()
,则可以正确获取数据。
你知道问题的原因是什么吗?
在这种情况下我不应该使用 valueChanges()
吗?
或者发生这种情况是因为我只获取了一次值(参见 take(1)
),因此永远不会获取更新的值?
提前感谢您的帮助
5 分钟后...正是我的问题是我没有监听更改,只读取一个值 (take(1)
),分别读取本地持久化的值,之后仅此而已, 因此不会获取更新后的值
我正在使用 AngularFire 并在我的 app.module.ts
:
imports: [
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule.enablePersistence()
]
当我的应用程序启动时,我使用 valueChanges()
检索用户,如下所示:
const doc: AngularFirestoreDocument<User> = this.myCollection.doc<User>(userId);
doc.valueChanges().pipe(take(1)).subscribe((user: User) => {
console.log(user);
}, (err) => {
console.err(err);
});
对我来说很奇怪,如果我从应用程序的另一个来源对数据库进行修改,例如,如果我将自己登录到 Google Firestore 控制台并手动修改用户数据中的值,这些不会获取数据。
如果我重新启动应用程序,它将始终获取本地持久化数据,并且永远不会注意到值已更改。
如果我分别删除持久性 enablePersistence()
,则可以正确获取数据。
你知道问题的原因是什么吗?
在这种情况下我不应该使用 valueChanges()
吗?
或者发生这种情况是因为我只获取了一次值(参见 take(1)
),因此永远不会获取更新的值?
提前感谢您的帮助
5 分钟后...正是我的问题是我没有监听更改,只读取一个值 (take(1)
),分别读取本地持久化的值,之后仅此而已, 因此不会获取更新后的值