Redux Saga-为什么让所有操作者不等待put操作完成再继续操作

问题描述 投票:0回答:1

我想等我yieldall中的所有put操作完成后再继续下一个yield。我认为这就是yieldall应该实现的目标。我是Redux Saga的新手,因此可能缺少一些细节或逻辑。

这是我的workerAnalytics(第一个使用派遣'ANALYTICS'来调用的工人)

export function* workerAnalytics(action) {
    console.log('here')
    let group = action.group
    yield put({ type: 'SHOW_LOADER', loading: action.loading })
    yield all([
        put({ type: 'BASIC_ANALYTICS', loading: 'client', group: group }),
        put({ type: 'BASIC_ANALYTICS', loading: 'KPI', group: group }),
        put({ type: 'BASIC_ANALYTICS', loading: 'country', group: group }),
        put({ type: 'BASIC_ANALYTICS', loading: 'estimated_revenue' }),
    ])
    console.log('there')
    yield put({ type: 'HIDE_LOADER', loading: action.loading })
}

我的workerBasicAnalytics(在从调度类型'BASIC_ANALYTICS'调用watcherBasicAnalytics之后调用)

export function* workerBasicAnalytics(action) {
    try {
        let data;
        if (action.loading === 'KPI') { yield put({ type: 'SHOW_LOADER', loading: action.loading }) }
        data = action.loading === 'client' ? yield call(() => axiosInstance.get(`/customer-conversion/?group=${action.group}`)) :
            action.loading === 'KPI' ? yield call(() => axiosInstance.get(`/kpi/?group=${action.group}`)) :
                action.loading === 'country' ? yield call(() => axiosInstance.get(`/customer-country/?group=${action.group}`)) :
                    action.loading === 'estimated_revenue' ? yield call(() => axiosInstance.get('/estimated-revenue/')) : null
        yield put({ type: "STORE_DATA", payload: data.data, fetch: action.loading })
        if (action.loading === 'KPI') { yield put({ type: 'HIDE_LOADER', loading: action.loading }) }
        console.log(action.loading)

    } catch (error) {
        console.log(error)
    }
}

如您所见,我在我的工作程序函数中都有console.log,以跟踪先执行哪个。问题是,在``这里''之后立即记录``那里'',这时应该是在记录``那里''之前应记录的单个workerBasicAnalytics console.log(action.loading),如console.log( 'there')出现在yieldall之后。

感谢所有帮助,谢谢大家!

redux react-redux redux-saga
1个回答
1
投票

您是否检查过workerBasicAnalytics是否被调用?还是如果您在捕获处理程序中捕获了错误?

更新:您可以这样做:

yield all([
  workerBasicAnalytics({loading: 'client', group: group}), 
  workerBasicAnalytics({loading: 'KPI', group: group}
)]
© www.soinside.com 2019 - 2024. All rights reserved.