Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redux传奇-为什么在继续之前不等待put操作完成_Redux_React Redux_Redux Saga - Fatal编程技术网

Redux传奇-为什么在继续之前不等待put操作完成

Redux传奇-为什么在继续之前不等待put操作完成,redux,react-redux,redux-saga,Redux,React Redux,Redux Saga,我想等待我的yieldall中的所有put操作完成,然后再进入下一个产量。我以为这就是yieldall应该达到的目标。我是Redux传奇的新手,因此可能会遗漏一些细节或逻辑 这是我的workerAnalytics(第一个使用dispatch“ANALYTICS”调用的工作人员) 我的workerBasicAnalytics(在watcherBasicAnalytics从调度类型“BASIC_ANALYTICS”调用后调用) 正如您所看到的,我在我的工作函数中都有console.log,以跟踪首先

我想等待我的yieldall中的所有put操作完成,然后再进入下一个产量。我以为这就是yieldall应该达到的目标。我是Redux传奇的新手,因此可能会遗漏一些细节或逻辑

这是我的workerAnalytics(第一个使用dispatch“ANALYTICS”调用的工作人员)

我的workerBasicAnalytics(在watcherBasicAnalytics从调度类型“BASIC_ANALYTICS”调用后调用)

正如您所看到的,我在我的工作函数中都有console.log,以跟踪首先执行哪个。问题是“there”就记录在“here”之后,而“here”本应是在“there”之前记录的单个workerBasicAnalytics console.log(action.loading),因为console.log(“there”)位于yieldall之后


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

你有没有检查WorkerbacialAnalytics是否被调用?或者如果您在catch handler中发现了错误

更新: 您可以这样做:

yield all([
  workerBasicAnalytics({loading: 'client', group: group}), 
  workerBasicAnalytics({loading: 'KPI', group: group}
)]

是的workerBasicAnalytics在workerBasicAnalytics结束时被称为console.log(action.loading),但问题是它是在workerAnalytics函数中的console.log('there')之后记录的,当我将put(类型:“BASIC_ANALYTICS”)包装在一个yieldall中时,情况不应该如此。另外,我把它包装在一个try-and-catch中,没有出现错误caughtok,问题是put是一个非阻塞调度效果,它不会等待响应。您可以使用等待调度函数返回的putResolve(blocking),也可以直接使用call(blocking),而不是上面关于如何使用的put.updated。当您使用yield时,请等待函数调用完成,而不是等待结果。是的,您可以使用call(workerBasicAnalytics,…args),它们都是相同的。在put的情况下,函数被调用,并转到下一个屈服点,它不会等待返回,这类似于异步调度函数。这没关系,因为您不期望任何回报,只希望更新状态。
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)
    }
}
yield all([
  workerBasicAnalytics({loading: 'client', group: group}), 
  workerBasicAnalytics({loading: 'KPI', group: group}
)]