Условный отказ RxJS и выборка

#angular #rxjs #rxjs-pipeable-operators

#angular #rxjs #rxjs-конвейерные операторы

Вопрос:

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

 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; 
});


  

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

Как я могу извлечь значение из animation $ и применить логику if else.

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

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

Комментарии:

1. Я думаю, что вы просите добавить animation$ в поток перед debounceTime ?

2. если animation $ имеет истинное значение, тогда не отменяйте

3. Ах, у меня было это наоборот. Я изменил свой ответ ниже

Ответ №1:

 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; 
});
  

Комментарии:

1. спасибо за ответ, я отредактировал ответ ur, чтобы использовать map в конце.

2. если анимация ложная, то следует применить отказ, иначе пропустить отказ

3. это неверно, поток конфигурации должен быть удален на основе animation $ stream

4. Тогда я не понимаю вашего вопроса. Итак, 1) debounceTime не должен выполняться, если animation$ stream возвращает false 2) debounceTime должен выполняться, если animation$ stream возвращает true 3) sample должен всегда выполняться, правильно ли я это понимаю?

5. если значение animation $ равно true, время завершения и образец не должны выполняться, если значение animation $ равно false, выполните как время завершения, так и образец