根据Angular中的某些特定条件更新消防仓库数据.SnapshotChanges()问题



我必须在某些特定条件下实时更新数据。即,在我的情况下,我必须根据会话id和用户id更新数据库cloudfirestore。以下是代码。

let docIdOfNonExistance = this.firestore.collection(
'testdb',
(ref_non_user) =>
ref_non_user
.where('userId', '>', result.userId)
.where('sessionId', '==', result.sessionId)
);
docIdOfNonExistance.snapshotChanges().subscribe((ref_non_user: any) => {
console.log(ref_non_user);
ref_non_user.forEach((doc_list) => {
this.firestore
.collection('testdb')
.doc(doc_list.payload.doc.id)
.update({ status: 'pending' });
});
});

一切都很完美,实时数据正在正确更新但问题是,在更新数据后,它会自动恢复到以前的状态。并且多次更新正在发生。我也尝试过取消订阅((方法,但第二次由于取消订阅方法,数据没有实时更新。

此外,我们可以直接使用docId进行更新,但这里我必须基于sessionId和userId进行更新。

请帮助我以这种方式使用多次触发是如何自动发生的。我发现这主要是由于snapshotChanges((方法造成的。

最简单的方法可能是向链中添加一个take(1)

docIdOfNonExistance.take(1).snapshotChanges().subscribe((ref_non_user: any) => {
...

根据我从文档中可以确定的,这也应该有效:

docIdOfNonExistance.get().subscribe((ref_non_user: any) => {
...

如果它确实有效,我更喜欢这种语法,因为它更接近底层JavaScriptSDK的工作方式。

最新更新