У меня есть простой компонент с одной кнопкой, которая запускает и приостанавливает поток чисел, генерируемых таймером RxJS.
import { Component, OnInit } from '@angular/core';
import { BehaviorSubject, Observable, timer, merge } from 'rxjs';
import { filter, bufferToggle, windowToggle, mergeMap, mergeAll, share } from 'rxjs/operators';
@Component({
selector: 'my-app',
template: '<button (click)="toggle()">{{ (active$ | async) ? 'Pause' : 'Play' }}</button>',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
active$ = new BehaviorSubject<boolean>(true);
ngOnInit(): void {
const on$ = this.active$.pipe(filter(v => v));
const off$ = this.active$.pipe(filter(v => !v));
const stream$ = timer(500, 500).pipe(share());
const out$ = merge(
stream$.pipe(
bufferToggle(off$, () => on$),
mergeAll(),
),
stream$.pipe(
windowToggle(on$, () => off$),
mergeAll(),
),
);
out$.subscribe(v => console.log(v));
}
toggle(): void {
this.active$.next(!this.active$.value);
}
}
Это работает отлично.
Мне нужно добавить еще одну функцию.
Мне нужно автоматически приостановить поток на основе значения в потоке, удовлетворяющем условию.
Например, приостановить поток, если последнее значение кратно 5.
У вас есть идеи, как это сделать?
Вот работающий пример на stackblitz https://stackblitz.com/edit/angular-6hjznn