我需要在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)
}
答案 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);
});
}