На самом деле, фрагмент кода, которым вы поделились из документации, создает слушателя изменений в вашей базе данных, поэтому вам не нужны бесконечные циклы.
Цитирование этой документации для обновлений в реальном времени .
Первоначальный вызов с использованием предоставленного вами обратного вызова немедленно создает моментальный снимок документа с текущим содержимым одного документа. Затем при каждом изменении содержимого другой вызов обновляет моментальный снимок документа.
Таким образом, каждый раз при отправке нового сообщения будет запускаться onSnapshot
. Вы можете сослаться на snapshot
вместо doc
в обратном вызове, который вы предоставляете, а затем вы можете использовать snapshot.docChanges()
, чтобы увидеть, что изменилось. Вот пример:
db.collection("chats").doc(chatId)
.onSnapshot(function(snapshot) {
if(snapshot.docChanges().length > 0){
//do something
}
});
ПРИМЕЧАНИЕ : Если это первый снимок, все данные будут в списке как добавленные изменения, и вы можете получать данные, принимая каждое изменение индивидуально и со ссылкой на свои данные: change.doc().data()
. Кроме того, поскольку вы запрашиваете chatId
, массив всегда должен иметь размер 1.