Дедупликация вызовов API с помощью Redux Saga - PullRequest
0 голосов
/ 19 декабря 2018

В части моего приложения мне нужно сохранить состояние элемента на сервере.Тем не менее, иногда я запускаю цепочку подчиненных, каждый примерно в 10 мс от другого.

State A
State B 
State C 
State D 

В этом случае мне действительно нужно только отправить состояние D.

Мое текущее решение - использовать takeLatest () для саги с

function* submitItemStateSaga(action: Action<SubmitItemStatePayload>) {
    yield call(delay, THROTTLE_MS);
    //saga body
}

Thisмне кажется, что-то вроде хакерства.Как вы думаете, это нормально, или есть лучший способ сделать это, используя встроенную функцию throttle ().

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Похоже, что debounce() от Redux-saga лучше подходит для вашего случая использования.Он ожидает замедления входящих действий, затем выполняет задачу с последним действием.

И throttle(), и debounce() реализованы с помощью примитивов, таких как fork() и call(), и предусмотрены реализациив документах.Когда поведение по умолчанию не работает для вас, эти реализации являются хорошим началом для написания вашего собственного пользовательского решения.

0 голосов
/ 19 декабря 2018

Это 10 мс определяется вами или ответом вашего сервера?Если последний, рано или поздно, этот подход вас подведетдействие, чтобы отменить предыдущее и начать следующее.А затем, после того как вы выполнили всю цепочку, вы отправляете действие, чтобы подтвердить отправку.

...