Я очень запутался в интеграции Firebase с ngrx/store. Поскольку Firebase имеет «живое» обновление на основе сокетов, поэтому данные хранилища уже синхронизируются с данными Firebase всякий раз, когда я обновляю Firebase. Проблема в том, что я не знаю, как прослушать обновление Firebase и вызвать побочный эффект с эффектом/хранилищем, чтобы сделать еще несколько обновлений в Firebase и клиентском хранилище. Любое предложение о том, как мне подойти к этой проблеме. На данный момент я должен использовать стратегию длительного извлечения Observable.interval(5000), чтобы вызвать сервисную функцию для запроса Firebase, чтобы узнать, произошло ли обновление. Код ниже:
@Effect() newMessages$ = Observable.interval(5000)
.withLatestFrom(this.store.select<UiState>("uiState"))
.map(([any,uiState]) => uiState)
.debug("We are querying Firebase to see if any update happened...")
.filter(uiState => Boolean(uiState.userId))
.switchMap(uiState => this.threadsService.loadNewMessagesForUser(uiState.userId)
.take(1)
.switchMap(data => this.threadsService.deleteMessagesQueuePerUser(uiState.userId).mapTo(data))
)
.debug("new messages received from server, and deleted temp record from Firebase")
.withLatestFrom(this.store.select<UiState>("uiState"))
.map(([unreadMessages, uiState]) => new NewMessagesReceivedAction({
unreadMessages,
currentThreadId: uiState.currentThreadId,
currentUserId: uiState.userId
}))
loadNewMessagesForUser и deleteMessagesQueuePerUser — это функция Firebase AngualrFire2. В основном он использует список для получения (отслеживания) новых обновлений в firebase и удаления данных отслеживания в firebase, когда мы знаем, какое новое обновление произошло за последние 5 секунд. Я хотел бы удалить эту логику и просто слушать firebase для обновления напрямую и запускать свой побочный эффект.