Да, это довольно легко реализовать в саге:
yield takeLatest('LIST_ITEM_SHOWN', watchListItemShown);
, поэтому, предпринимая последнее действие LIST_ITEM_SHOWN
для сохранения в журналах, так что в случае нескольких действий - предыдущие задачи отменяются (выиграл 'после delay
).
// for simplicity storing logs in private variable, consider using redux or something similar
let logs = [];
function* watchListItemShown(action) {
yield call(logs.push, action.payload);
yield call(delay, 2000);
yield call(saveToApi, logs);
logs = [];
}
Таким образом, при каждом действии LIST_ITEM_SHOWN
вы сохраняете журналы в локальной переменной (вместо этого вы можете использовать redux
или что-то подобное, так что вы будете делать журналы лучшеуправление через редукторы).И после 2 секундной задержки вызывается фактическое сохранение.