Redux-Sagaでデバウンスを行う方法はありますか?後続のコールが同じ遅延の後ろにキューイングされます。キューに追加された新しいタスクごとにバンプが発生し続けます。ロダッシュのデバウンスhttps://lodash.com/docs#debounceに似ています。遅延/キャンセルだけでなく、Redux Sagaデバウンス
私は現在redux-sagaのデバウンスに類似していますが、まだ各タスクを実行したいのでキャンセル部分を削除しました。後で単一スレッドですべてのイベントをまとめてバンドルしたいだけです。
私は現在持っているもの:
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);
}
}
私は変数にフォークを割り当て、それが実行されていたならば、チェックしてみました(.isRunning())が、私は別の遅延によってそのフォークを延期することができる方法を知りませんでした。