我有一个使用redux-thunk的应用程序,想要尝试使用redux-observable。 目前我有一个thunk动作创建者执行以下操作:
const initState = () => {
return dispatch => new Promise((resolve,reject)=>{
//these each return axios promises as they get data from the server
const pr1 = dispatch(processData1())
const pr2 = dispatch(processData2())
Promise.all([pr1,pr2])
.then(r=>resolve(true))
.catch(e=>reject(e))
})
}
}
这是从componentDidMount中的组件调用的,如下所示:
this.props.initState()
.then(r=>this.setState({loaded:true}))
.catch(e=>this.setState({loadError:true}))
现在我想尝试使用redux-observable我可以将它与redux-thunk结合使用并替换processData2()
调用来调度一个由redux-observable处理的动作吗?
即。
const pr2 = dispatch({type:OBSERVABLE_PROCESSDATA2})
现在据我所知,这不会返回一个承诺,所以原来的代码现在会在Promise.all
.then(r=>resolve(true))
中立即中断,即使redux-observable epic已经尚未加工。
那么有没有办法让我可以等待这个调度来执行史诗中的异步内容,或者在这种情况下我是否需要基本上一直使用redux-observable?
答案 0 :(得分:0)
您可以在同一项目中结合使用redux-thunk和redux-observable。
actions ---> redux-thunk ---> redux-observable ---> store
但是redux-observable的想法是action $ in和action $ out。因此,您将需要在史诗中编写所有异步逻辑,并且无权访问返回的observable(即动作流)。
因此,要么您可能想将整个initState转换为史诗,要么就直接在此thunk中直接使用rx.js而不创建史诗