如何仅在Firebase实时数据库(Angular)中一次获取()多个更新值

时间:2019-05-29 13:14:35

标签: angular firebase firebase-realtime-database angularfire2

我正在固定时间更新Firebase-实时数据库中每个用户的所有数据,并且正在使用:

this.db.list('/' + this.user.uid + '/data).valueChanges()
.subscribe(items=>{
    console.log(items)
});

检索更新。但是由于多个值被更新(即使一次全部更新),因此我在Web应用程序中一次收到一个更新。 这正常吗?有什么办法可以全部更新并只接收一次更新?

2 个答案:

答案 0 :(得分:1)

如果您在某个侦听器所在的位置进行多个独立的更新,则该侦听器可能会触发与更新相同的次数。该系统将尝试尽可能快地同步所有更改。您无法更改此行为。如果您只希望进行一次更新,则应该只在该位置进行一次更改。

答案 1 :(得分:0)

如果您真的不喜欢多重发射,可以在订阅之前尝试一些RxJS运算符。

this.db.list('/' + this.user.uid + '/data).valueChanges().pipe(
    buffer(interval(1000))
)
    .subscribe(items=>{
          console.log(items);
});

例如,这将在一秒跨度内发出一个值数组。

如果有一种方法可以在 更新时进行监听(或者更确切地说,从服务器确认更新成功),则可以监听,然后仅获取{{ 1}},而不是每个值都会随之改变。