Redux传奇:检测耗时的异步任务

Redux传奇:检测耗时的异步任务,redux,timeout,redux-saga,Redux,Timeout,Redux Saga,我正在尝试使用redux saga检测任务何时需要很长时间。 SomeHeavyAsyncFunc是一项时间消耗从几毫秒到几秒钟不等的任务。 我想在需要超过一定时间时触发一个动作,以显示加载程序 然而,我不想与延迟赛跑,我只想在必要时触发加载操作,但我不想取消操作,即使它很长 以下是我想法的摘录: const timeOut = yield fork(function* () { yield call(delay, 300); yield put(isPendin

我正在尝试使用
redux saga
检测任务何时需要很长时间。
SomeHeavyAsyncFunc
是一项时间消耗从几毫秒到几秒钟不等的任务。 我想在需要超过一定时间时触发一个动作,以显示加载程序

然而,我不想与延迟赛跑,我只想在必要时触发加载操作,但我不想取消操作,即使它很长

以下是我想法的摘录:

    const timeOut = yield fork(function* () {
      yield call(delay, 300);
      yield put(isPending());
    });
    // in parallel run the computation
    // it will cancel the timeout after computation is done
    const task = yield fork(function* () {
      const res = yield call(SomeHeavyAsyncFunc);
      yield cancel(timeOut);
      yield put(success());
    });
超时将在后台运行。如果它结束了,它将简单地放置一个显示加载程序的操作。当任务完成时,超时被取消,因此如果任务确实很快,则不会显示加载程序

然而,这似乎不起作用。仅当此示例中的操作超过300ms时,才会触发挂起的操作。但是,延迟结束后不会立即触发,因此加载程序只会很晚才显示


有人在这方面有一个有效的例子吗?也许我的故事是错误的,但我所要求的只是使用redux可以撤销(由于减少了计算时间)?

您的代码应该可以正常工作。您确定操作在延迟后启动吗?(例如,如果您在调用delay之前和之后
console.time
,它会打印超过300个吗?)?最后,在你的异步函数等待结果的时候,你的应用程序中还有其他事情吗?另外,我看到你的
任务
被分叉了:这部传奇在分叉之后做了更多的工作吗?是的,它确实工作了,这确实是我的整个电子应用程序,由于计算量大而冻结了。我认为我在渲染过程中做了很多事情,我将尝试进行调查。除了开发控制台之外,您是否有提高性能的特定工具?