Попытка буферизовать данные таким образом, чтобы
- Входные данные обрабатывались для каждого входа
name
.Если a
и b
- это два разных файловых содержимого разных файлов, отправляемых рядом друг с другом, то их запрос должен обрабатываться индивидуально. - После того, как промежуток времени отладки завершается, он должен последовательно отправляться на сервер, так чтопротиводавление может быть принято во внимание.
- Значение отклонения должно быть переопределено последним излучением того же типа.
при условии, что отклонение для 5 кадров
INPUTS IN TIME a-a---a-b-----b--------b-b-----a-----a--b--a-----
send data to server -----------a--b-----b----------b-----a-------b---
let a: { name: string, value: string } = { name: 'a', value: 'a' }//input
let b: { name: string, value: string } = { name: 'b', value: 'b' }//input
Проверенный код
export interface SaveEntry {
resource: string;
provider: MonoTypeOperatorFunction<any>;
}
const bufferSave = new BehaviorSubject<SaveEntry[]>([]);
export const saveEpic
= (action$, state$, { }) =>
merge(action$.pipe(ofType(CONTENT_CHANGE)).pipe(map(x => x)), action$.pipe(ofType(SAVE)).pipe(map(x => x)))
map(input => {
bufferSave.next([...bufferSave.value, {
resource: input.action.payload.name, provider: debounce(() => {
if (input.delayTime) {
console.log('---debounce to delay', input.delayTime);
return timer(input.delayTime);
} else {
console.log('---debounce not to delay');
return timer(0);
}
}),
}],
);
return bufferSave
.pipe(
concatMap(entries => entries.map(({ provider }) => forkJoin(from(provider))),
),
tap(result => console.log('----result', result)),
map(response => ({ type: SAVE_RESPONSE, ...response })),
);
});