Вложен ли FireStore на Snapshot, слушатели в реагируют на родную? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь сделать что-то подобное для своего приложения:

snapshotListeners() {
  firestore()
    .collectionGroup()
    .where()
    .onSnapshot({
      error: //Handle error
      next: firstSnapshot => {
        firstSnapshot.docsChanges().forEach(change => {
          //Data retrieved and used in the below query to get more data
          firestore()
            .collection()
            .where() //using the data retrived from the above query here.
            .onSnapshot({
              error: //Handle error
              next: secondSnapshot => {
                secondSnapshot.docsChanges().forEach(change =>{
                  //More Data from second query
                })
              }
            })
        })
      }
    })
}

Второй запрос зависит от данных, полученных из первого, и я sh буду прослушивать изменения в обоих запросы в соответствующих документах.

Например, функциональность группы: Это моя структура базы данных:

Groups(top-level collection)
    |_groupId(documents) - Members(subcollection) 
    |_groupId             |     |_uid(document)
                          |     |_uid
                          |
                          |__groupdata(Fields like title, description, etc)

Так что я буду использовать first listener для прослушивания изменений в документах этого конкретный пользователь в подколлекции Members и second listener для извлечения групп (данных о группах) он находится в режиме реального времени, так что когда он добавляется / удаляется из группы, список / интерфейс автоматически обновляется так же, как WhatsApp.

Или даже если данные группы изменяются как заголовок, описание и т. Д. c. эти изменения прослушиваются и обновляются во внешнем интерфейсе.

Рекомендовано ли это вложение слушателей моментальных снимков для этого варианта использования или есть другой способ?

Справка будет очень признательна.

1 Ответ

1 голос
/ 17 января 2020

Вложение слушателей, как это вполне нормально и, когда сделано в разумных масштабах, не проблема. То, что является разумным, является немного субъективным и зависимым, но давайте скажем: то, что помещается на одном экране в мобильном приложении, вероятно, является разумным ограничением.

Имейте в виду, что вам придется самостоятельно управлять слушателем. Поэтому сохраняйте список вложенных слушателей, которые вы добавили, и добавляйте новых только тогда, когда внешний слушатель запускает (и удаляет устаревших).

Если вы хотите что-то, что масштабируется дальше, вы можете дублировать соответствующие данные от каждого члена (вложенные документы) в группу (родительский документ).

В качестве третьего варианта вы можете создать отдельную подколлекцию только для членов определенной группы, чтобы вы могли прослушивать их все с помощью одного прослушивателя снимков.

...