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方法中使用设置的超时,它会起作用。