Ошибка в эпике с 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
обратный вызов является асинхронным, что означает, что он не возвращает наблюдаемое, которое испускает
fetchMenuSuccess
action, он возвращает обещание, которое разрешается в наблюдаемое. Rx автоматически развернет обещание, что означает, что наблюдаемый объект, возвращенный из этого эпика, испускает наблюдаемые объекты вместо того, чтобы подписываться на них и испускать свои собственные значения.
Удаление
async
ключевое слово должно исправить это.