我正在嘗試編寫Epic for redux-observable。但我有一個問題(如何在ajax請求之前和之後使redux-observable發送多個動作?
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'兩種情況下 –
不工作....我得到錯誤 TypeError:action $ .ofType(...)。mergeMap(...)。map(...)。然後不是函數 – user2397623
我可以知道爲什麼你用'.map'代替'.then'你的代碼?和你使用的是什麼HTTP庫? –