如果启用了持久性,AngularFire不会检测到更改

时间:2019-02-13 06:54:15

标签: angular google-cloud-firestore angularfire2 angularfire

我正在使用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)),因此从未获取更新过的值吗?

提前寻求帮助

1 个答案:

答案 0 :(得分:3)

5分钟后...我的问题恰恰是我没有在听更改,而是只读取一个值(take(1)),因此将分别读取本地持久化的值,此后什么也没有了,因此更新的值将不会被获取