Ошибка в эпике с redux-observable и rxjs

Я пытаюсь создать эпос, который извлекает данные из firestore с помощью rxfire. При каждой передаче значения должно быть отправлено действие. Мои коды выглядят так:

const fetchMenu = (action$, _state$) => {
  return action$.pipe(
    ofType(Types.FETCH_MENU_REQUESTED),
    flatMap((async ({ resID }) => {
      const firestore = firebase.firestore();
      const menuRef = firestore.collection('menus').where('resID', '==', resID);
      return collectionData(menuRef, 'id')
      .pipe(
        map(val => {
          return Creators.fetchMenuSuccess(val);
        })
      )
    }
    )),
  );
};

Однако я получаю сообщение об ошибке Actions must be plain objects. Use custom middleware for async actions.

Насколько я понимаю, pipeоператор помещает мое значение в наблюдаемое, поэтому я получаю сообщение об ошибке, но я не уверен, что делать, чтобы он возвращал только действие. Я все еще немного новичок в rxjs, поэтому любая помощь будет очень признательна.

1 ответ

Решение

Твой flatMap обратный вызов является асинхронным, что означает, что он не возвращает наблюдаемое, которое испускает fetchMenuSuccessaction, он возвращает обещание, которое разрешается в наблюдаемое. Rx автоматически развернет обещание, что означает, что наблюдаемый объект, возвращенный из этого эпика, испускает наблюдаемые объекты вместо того, чтобы подписываться на них и испускать свои собственные значения.

Удаление async ключевое слово должно исправить это.

Другие вопросы по тегам