У меня есть коллекция firestore, которая получает новые записи от пользователя. Я хочу прослушать эту коллекцию и обновить данные в режиме реального времени.
Я могу получить данные в своем сервисе, но при возврате в сервис они недоступны.
У меня есть эффект ngrx, который получает публичные данные. Именно здесь res
не является массивом данных, которые я ожидал от моего сервисного вызова.
@Effect()
getPublicData$ = this.actions$.pipe(
ofType<ActionGetPublicData>(ActionTypes.GET_PUBLIC_DATA),
map(() => this.afs.getPublicData()),
map(res => {
console.log('res:::', res);
return new ActionGetPublicDataSuccess({ publicData: res });
}),
catchError(error => of(new ActionGetPublicDataFailure({ error: error })))
);
Мой сервисный звонок:
getPublicData() {
const publicDataRef = firebase.firestore().collection('publicData').where('count', '>', 0);
return publicDataRef.onSnapshot(function(querySnapshot) {
const historyData = [];
querySnapshot.forEach(function(doc) {
historyData.push(doc.data());
});
// The historyData prints an array of document data, as needed.
console.log('historyData::::', historyData);
return historyData;
});
}
Я ожидал, что массив данных будет возвращен к эффекту как res
, чтобы я мог затем отправить успешное действие и добавить данные в мое состояние. Но res
записывается следующим образом:
res::: ƒ () {
asyncObserver.mute();
firestoreClient.unlisten(internalListener);
}