#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, выполните как время завершения, так и образец