Я пытаюсь написать Epic для наблюдаемого сокращения. Но у меня проблема (
ON_EMPTY_FORM_STATE
действие выполняется до выполнения .map(response => formSavedAction(response))
.
Как я могу это исправить? В основном я пытаюсь получить:
- Захватить
FORM_SEND
действие - Отправить запрос Ajax с полезной нагрузкой
- Если я получу ответ 200 от сервера, выполните
formSavedAction(response)
- Если я получаю ошибку 500, отправьте
{ type: ON_FORM_SUBMIT_ERROR }
- В конце (независимо от того, какой запрос Ajax был возвращен) я хочу отправить действие
{ type: EMPTY_FORM_STATE }
А вот мой код:
const saveProductEpic = (action$, $store) =>
action$.ofType(SUBMIT_FORM)
.mergeMap(action => ajax.post('http://localhost:9000/products', action.payload,
{ 'Content-Type': 'application/json' }))
.map(response => formSavedAction(response))
.catch(err => { $store.dispatch({ type: ON_FORM_SUBMIT_ERROR }) })
.do(() => { $store.dispatch({ type: EMPTY_FORM_STATE }) })
Проблема в том, что действие { type: EMPTY_FORM_STATE }
отправляется до, а не после запроса AJAX.
Есть ли способ исправить это?
.do
и добавьте$store.dispatch({ type: EMPTY_FORM_STATE })
к двум случаям.then
и.catch
- person Amr Aly   schedule 28.08.2017.map
вместо.then
в своем коде? а какую http библиотеку вы используете? - person Amr Aly   schedule 29.08.2017