有没有办法在 Redux-Saga 中消除抖动,其中后续调用在相同的延迟之后排队,这会不断被添加到队列中的每个新任务碰撞。类似于 lodash 的去抖动https://lodash.com/docs#debounce。
我目前有类似于 redux-saga 的 debounce 的东西,但删除了取消部分,因为我仍然想执行每个任务,我只想捆绑所有事件以便稍后在单个线程中触发。
我目前拥有的:
const deferTime = 2000;
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
export function* sendClickEvent (event, debounce) {
if (debounce) {
yield call(delay, deferTime);
}
yield put(action(event));
}
export function* clickSaga () {
while (true) {
const action = yield take(WIDGET_CLICKED);
const state = yield select();
const debounce = action.meta && action.meta.debounce;
const payload = getWidgetClickPayload(state, action);
const defaultData = getDefaultData(state);
const event = {
name: payload.name,
data: Object.assign(defaultData, payload.data)
};
yield fork(sendClickEvent, event, debounce);
}
}
我尝试将 fork 分配给变量,然后检查它是否正在运行(.isRunning()),但不知道如何才能将那个 fork 再推迟一次。