У меня есть приложение для обмена сообщениями, где каждое сообщение хранится в реальном времени в БД. Существует панель для отображения общего количества сообщений, которыми обмениваются до сих пор.
Чтобы реализовать статистику, счетчик сообщений сохраняется за каждый день, а счетчик за текущий день обновляется с помощью триггера функции firebase при обмене новыми сообщениями.
ниже показано, как выглядят данные
stats
count
1559260800000
messages: 48
1559347200000
messages: 6
Мой HTML-код панели инструментов, как показано ниже
<div>{{msgCount}}</div><div style="display: none">{{msgCountArr | async}}</div>
my .ts
msgCount:number
msgCountArr: Observable<any[]>
refreshMessages(){
this.msgCountArr = this.dataSvc.fetchMsgCount().pipe(
map((msgs: any) => msgs.map(msgObj => {
this.msgCount = +this.msgCount + +msgObj.messages
return msgObj
}))
);
}
Сервис выглядит ниже
private msgCountList: AngularFireList<Object>
fetchMsgCount(){
this.msgCountList = this.db.list<Object>('stats/count', ref => ref.orderByChild("messages"))
return this.msgCountList.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ key: c.payload.key, ...c.payload.val()}))
)
) ;
}
Проблема в том, что msgCount продолжает добавлять целое число, поскольку я не знаю, как сбросить счетчик каждый раз, когда данные извлекаются из базы данных только что.
Также добро пожаловать, если есть лучший способ сделать это.