Я работаю над приложением, с помощью которого я периодически сохраняю информацию на сервере, когда пользователь перемещается между страницами.
В настоящее время мы делаем это, планируя действие «persist», которое распространяет упорядоченное количество событий, прежде чем закончить действие «persist_end». В настоящее время, если пользователь перемещается быстро, эти сгруппированные действия могут перехватывать друг друга, что приводит к различным проблемам. Я думал, что могу буферизовать начальное действие и дождаться выполнения конечного действия.
Я создал аналогичный пример, используя пример пинг-понга с сайта Redux-Observables: https://codepen.io/dualcyclone/pen/GOZRxW?editors=0011
const actionPauser = new BehaviorSubject(false);
const pingEpic = action$ =>
action$.ofType(PING)
.do(action => console.log(action)) // check if action caught by epic
.buffer(actionPauser.asObservable().filter(paused => !paused))
.do(eh => console.log('buffered? ',eh)) // check if buffered actions is occurring
.do(() => actionPauser.next(true)) // tell pauser to pause
.map((buf) => buf[buf.length-1])
.filter(action => action !== undefined)
.delay(1000)
.mapTo({ type: PONG });
const pauseEpic = action$ =>
action$.ofType(PONG)
.delay(1000)
.do(() => actionPauser.next(false)) // tell pauser to not pause
.mapTo({ type: PING });
Предпосылка аналогична, я разрешаю пользователю нажимать кнопку «start PING» так часто, как они хотят, эпик, который это слушает, должен проверить, не происходит ли в данный момент действие ping (с помощью BehaviorSubject «actionPauser» ) и ставьте в очередь любые действия, пока не завершится предыдущее действие проверки связи.
Эпос должен выдавать самое последнее буферизованное действие, поэтому он фильтрует буферизованный список, а затем проходит через самое последнее действие.
Что я не могу понять, так это - журнал консоли, чтобы указать, сколько буферизованных действий возникает, как только страница загружается; что может указывать на проблему с тем, как это построено - я что-то упустил?
audit
был бы вам полезен. - person cartant   schedule 03.11.2017