Как получить () несколько обновленных значений только один раз в базе данных реального времени Firebase (Angular) - PullRequest
0 голосов
/ 29 мая 2019

Я обновляю все данные для каждого пользователя в Firebase - База данных реального времени через фиксированные промежутки времени, и я использую:

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

для получения обновления. Но поскольку несколько значений обновляются (хотя и все сразу), я получаю в веб-приложении по одному обновлению за раз. Это нормально? Есть ли способ обновить все и получить обновление только один раз?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Если вы производите несколько независимых обновлений в месте расположения слушателя, слушатель может запустить столько раз, сколько будет обновлений.Эта система попытается синхронизировать все изменения настолько быстро, насколько это возможно.Вы не можете изменить это поведение.Если вам нужно только одно обновление, вам следует сделать только одно изменение в этом месте.

0 голосов
/ 29 мая 2019

Если вам действительно не нравятся множественные выбросы, вы можете попробовать некоторые операторы RxJS перед подпиской.

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

Например, это выдает массив значений в пределах одного секунды.

Если есть способ прослушивания , когда вы обновляете (или, скорее, подтверждение от сервера, что обновление прошло успешно), вы можете прослушать это, а затем просто получить текущее значение this.db.list вместо каждого изменения значения по мере поступления.

...