Как посмотреть коллекцию Firestore и вернуть ее результаты с помощью эффекта ngrx? - PullRequest
0 голосов
/ 14 января 2019

У меня есть коллекция 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);
        }
...