Javascript redux saga takeEvery仅使用setTimeout调用
我有一个容器,用于发送以下操作:Javascript redux saga takeEvery仅使用setTimeout调用,javascript,redux,redux-saga,Javascript,Redux,Redux Saga,我有一个容器,用于发送以下操作: const mapDispatchToProps = (dispatch, ownProps) => { return { getPageTree: (siteId) => { dispatch(getPageTree(siteId)); } } } const explorer = connect( mapStateToProps, mapDisp
const mapDispatchToProps = (dispatch, ownProps) => {
return {
getPageTree: (siteId) => {
dispatch(getPageTree(siteId));
}
}
}
const explorer = connect(
mapStateToProps,
mapDispatchToProps
)(Explorer);
在我的组件(通过容器发送道具)中,我添加了:
componentWillMount(){
setTimeout(() => this.props.getPageTree());
}
传奇故事:
function* fetchPageTree(action){
try{
const data = yield call(Api.fetchPageTree, action.payload.url);
yield put({type: 'FETCH_SUCCEEDED', data});
}catch(error){
yield put({type: 'FETCH_FAILED', error})
}
}
export function* watchFetchData(){
console.log('watch');
yield* takeEvery('GET_PAGETREE', fetchPageTree);
console.log('finish watch');
}
在组件中应用setTimeout
时,saga watcher使用takeEvery
正确调用fetchPageTree
,但不执行fetchPageTree
。也不会抛出错误 知道原因吗 编辑:
index.es6文件包含以下初始化逻辑,但为总体标准:
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
appReducers, //Combined reducers
applyMiddleware(sagaMiddleware)
);
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('zp-app')
)
sagaMiddleware.run(rootSaga);
const sagaMiddleware=createSagaMiddleware();
const store=createStore(
评估人员,//组合减速器
applyMiddleware(sagaMiddleware)
);
渲染(
,
document.getElementById('zp-app')
)
sagaMiddleware.run(rootSaga);
您什么时候调用了render
函数?
如果在sagaMiddleware.run(rootSaga)之后调用render函数,它应该可以延迟调用
this.props.getPageTree
什么时候调用render
函数?
如果在sagaMiddleware.run(rootSaga)之后调用render函数,它应该可以使用延迟调用
this.props.getPageTree
getPageTree(siteId)返回什么?应用setTimeout是什么意思?@baissang它是一个动作创建者返回一个动作对象来获取页面树。我认为问题与组件方法在传奇之前被调用的事实有关。setTimeout允许其他进程在函数运行之前完成。目前不确定如何解决此问题。您确定setTimeout()和getPageTree(siteId)的操作输出格式相同吗?@html\u程序员您解决过此副作用/异步问题吗?我也遇到了同样的问题,调用了这个操作,但从未触发saga take latest,但如果在mount方法中使用设置的超时,它会工作。getPageTree(siteId)返回什么?应用setTimeout是什么意思?@baissang它是一个动作创建者返回一个动作对象来获取页面树。我认为问题与组件方法在传奇之前被调用的事实有关。setTimeout允许其他进程在函数运行之前完成。目前不确定如何解决此问题。您确定setTimeout()和getPageTree(siteId)的操作输出格式相同吗?@html\u程序员您解决过此副作用/异步问题吗?我也遇到了同样的问题,调用了动作,但从未触发saga take latest,但如果在mount方法中使用设置的超时,它会起作用。