Вместо использования тайм-аута Javascript, это может быть решено очень аккуратно с помощью мощной функциональности самой redux-saga, в частности комбинации takeLatest
с побочным эффектом 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);
});
}
С таким редуктором:
export function count(state = 0, action) {
switch (action.type) {
case COUNT_UPDATE:
return action.count;
case COUNT_RESET:
return 0;
default:
return state;
}
}