RxJs условный дебад и сэмплинг - PullRequest
1 голос
/ 31 марта 2019

Условное добавление времени отката в поток на основе значения из другого потока

const configuration$ = new Subject().asObservable();
const animation$ = new BehaviorSubject(false).asObservable;

вышесказанное исходит от какой-то службы

configuration$.pipe(debounceTime(CONSTANTS.DEBOUNCE),sample(interval(CONSTANTS.SAMPLE)));

configuration.subscribe(data=> {
   // do the stuff; 
});


Если анимация $ имеет истинное значение, то debounceTime, sample следует пропустить.

Как извлечь значение из анимации $ и применить, если еще логика.

Если бы я только мог сделать

 configuration$.pipe(
    animation$ ? 
    pipe(debounceTime(CONSTANTS.DEBOUNCE),sample(interval(CONSTANTS.SAMPLE))) :
    of
);

1 Ответ

2 голосов
/ 31 марта 2019
configuration$.pipe(
  withLatestFrom(animation$),
  filter((stream) => !stream[1]),

  // now the rest of the stream will only execute if animation$ emits true
  debounceTime(CONSTANTS.DEBOUNCE),
  sample(interval(CONSTANTS.SAMPLE)),
  map(stream=>stream[0])
);

configuration.subscribe(data=> {
   // do the stuff; 
});
...