javascript - Redux saga debounce 而不仅仅是延迟/取消

标签 javascript reactjs generator redux redux-saga

有没有一种方法可以在 Redux-Saga 中消除抖动,其中后续调用会在相同的延迟之后排队,而添加到队列中的每个新任务都会不断地影响该延迟。类似于lodash的debounce 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 推迟另一个延迟。

最佳答案

Redux saga 现在有 debounce功能/效果:

import { call, put, debounce } from `redux-saga/effects`

function* fetchAutocomplete(action) {
  const autocompleteProposals = yield call(Api.fetchAutocomplete, action.text)
  yield put({type: 'FETCHED_AUTOCOMPLETE_PROPOSALS', proposals: autocompleteProposals})
}

function* debounceAutocomplete() {
  yield debounce(1000, 'FETCH_AUTOCOMPLETE', fetchAutocomplete)
}

关于javascript - Redux saga debounce 而不仅仅是延迟/取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392020/

相关文章:

python - 如何检查 Generator 类型对象?

javascript - 使用新数据更新/修改 d3 词云

javascript - 如何使用 onClick 处理程序在 React 组件中创建链接?

javascript - _.isFunction(a) 与 typeof a === 'function'? javascript

javascript - React 应用程序渲染空页面,控制台没有错误

javascript - react : Text and ternary combination not working

file - "tail -f"类生成器

c++ - 如何生成仅包含 0's and 9' 的数字

javascript - 计算 HTML5 视频的偏移量

javascript - 当无法提供文件时如何显示用户友好的错误消息