Я пытаюсь применить метод ajax, опубликованный здесь: https://github.com/redux-observable/redux-observable/blob/master/docs/basics/Epics.md
import { ajax } from 'rxjs/ajax';
// action creators
const fetchUser = username => ({ type: FETCH_USER, payload: username });
const fetchUserFulfilled = payload => ({ type: FETCH_USER_FULFILLED, payload });
// epic
const fetchUserEpic = action$ => action$.pipe(
ofType(FETCH_USER),
mergeMap(action =>
ajax.getJSON(`https://api.github.com/users/${action.payload}`).pipe(
map(response => fetchUserFulfilled(response))
)
)
);
// later...
dispatch(fetchUser('torvalds'));
При попытке этого метода я получаю сообщение:
TypeError: Object (...) (...). pipe не является функцией
Таким образом, pipe не существует.(Это касается второго канала после вызова ajax).
Как это исправить?
Я установил следующие зависимости:
"rxjs": "^6.5.2",
"rxjs-compat": "^6.5.2",
Редактировать:
Я изменил свой код на ajax.get
и код вызова:
export const fetchTrendingEpic = action$ => action$.pipe(
ofType(FETCH_TRENDING_REQUEST),
mergeMap(async(action) => {
const res = await fetchPostStats(action.payload);
console.log(res);
res.pipe(
map(response => {
console.log('response', response);
setTrendingPlaces({trendingPlaces: response});
})
)
})
);
Res был правильно напечатан (показывает наблюдаемое), но теперь я получаю сообщение об ошибке:
TypeError: Невозможно прочитать свойство 'type' из неопределенного
Вот какЯ создаю свой магазин в dev:
const createEnhancer = (epicMiddleware) => {
const middleware = [ epicMiddleware, createLogger() ];
let enhancer;
if (getEnvironment() === 'development') {
enhancer = composeWithDevTools(
applyMiddleware(...middleware),
// other store enhancers if any
);
};
export default (initialState) => {
const epicMiddleware = createEpicMiddleware();
const enhancer = createEnhancer(epicMiddleware);
const store = createStore(rootReducer, initialState, enhancer);
epicMiddleware.run(rootEpic);
return store;
}
Редактируем заметку:
Это код, выполняемый в NodeJS (SSR).
Я борюсь с этим, не совсем понимаюкак это может быть так трудно заставить работать без ошибок.
Не совсем понимаю, как будет работать пример кода, когда ajax.getJSON
возвращает обещание, а не наблюдаемое ...