Redux-Saga如何缓冲动作

时间:2019-06-24 14:02:10

标签: javascript redux redux-saga

我需要在saga中的每个动作调用上增加计数变量,并在一段时间后(例如1500 ms)调用func并清除计数。我该怎么做?

类似的东西:

export function* example() {
  let count = 0;
  let timeout;

  const data = yield take(rootAction.adverts.likeAdvert.request)

  if (timeout) {
    clearTimeout(timeout)
  }

  count++;

  timeout = setTimeout(() => {
    // replace with eventChanel
    yield apiCall(count, data)

    count = 0
  }, 1500)
}

1 个答案:

答案 0 :(得分:0)

可以使用redux-saga本身强大的功能(特别是geom_point()takeLatest副作用的组合)很好地解决此问题,而不是使用Javascript超时。

示例:

delay

使用这样的减速器:

export function* example() {
    const data = yield take(rootAction.adverts.likeAdvert.request);
    const count = yield select((state) => state.count);
    yield put({ type: COUNT_UPDATE, count: count + 1, data });
}

export function* listenForCount() {
    yield takeLatest(COUNT_UPDATE, function* handle(action) {
        yield delay(1500);
        yield put(COUNT_RESET);
        yield apiCall(action.count, action.data);
    });
}