我正在尝试使用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());
});
超时在后台运行。如果它结束了,它只是放置一个显示加载器的动作。任务完成后超时被取消,因此如果任务实际上很快,则不会显示加载程序。
但是,这似乎不起作用。仅当此示例中的操作超过300毫秒时才会触发挂起操作。但是,一旦延迟结束但后来没有触发,所以装载机只会很晚才出现。
有人在这方面有一个有效的例子吗?也许我的传奇是错的,但我要求的是使用redux(由于减速器计算时间)可以撤销吗?