使用redux-thunk和redux-observable

时间:2018-01-29 21:27:08

标签: javascript reactjs rxjs5 redux-thunk redux-observable

我使用redux-thunk来管理我的react应用程序中的异步内容,我想使用redux-observable更轻松地管理复杂的异步流(例如,连接多个Ajax调用)。有没有办法在不修改已经完成的工作的情况下这样做?

这是我的意思的一个例子:

const fetchSomeData = () => {
    return (dispatch, getState) => {
        doAnAjaxCall((err, response) => {
            if (err) return dispatch({type: 'ERROR', err})
            // do something
            return dispatch({type: 'SUCCESS', response})
        })
    }
}

是否可以在史诗中使用fetchSomeData? 由于redux-thunk是基于promise的redux-observable应该允许的,我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

是的!你完全可以一起使用它们。只需将redux-thunk中间件放在 redux-observable中间件之前。

applyMiddleware(thunkMiddleware, epicMiddleware)

https://stackblitz.com/edit/redux-observable-playground-8c7pd9?file=ping-pong.js

Redux按照它们作为参数提供的顺序应用中间件,因此在这种情况下,我们希望thunk中间件吸收任何调度的thunk,以便thunk函数本身永远不会达到redux-observable(仅纯操作)。但是你的epics仍然可以调度thunk,因为redux-observable中间件使用了store.dispatch