javascript - RxJS - sänd endast om den andra inte sänder under fördröjning
Anta att jag har två observabler. Varje gång den första sänder något vill jag vänta 2 sekunder för att se om den andra observabeln sänder något under den perioden. Om ja, sänd inget. Om nej, sänd.
Exempel :
const start$ = this.events.pipe(
delay(1000),
takeUntil(theSecondObservable) // WHAT SHOULD BE HERE?
).subscribe((value) => {
console.log(value);
});
Svar #1
Denna lösning slutförs inte när end$-observabeln sänder och använder RxJS 6-syntax.
const start$ = this.router.events.pipe(map(() => true));
const end$ = this.router.events.pipe(map(() => false));
merge(start$, end$)
.pipe(debounceTime(2000), filter(value => value))
.subscribe(value => console.log(value));
Om du filtrerar routerhändelser kanske du inte behöver två observabler.
this.router.events
.pipe(debounceTime(2000), filter(event => event instanceof NavigationEnd))
.subscribe(value => console.log(value));
Svar #2
Använd tävlingsoperatorn.
const start$ = race(this.events.pipe(delay(1000)), theSecondObservable).subscribe(value => /** ... */);
När en av de observerbara sänder ett objekt kommer den andra observerbara att ignoreras och endast värden som sänds av 'vinnaren' kommer att skickas vidare till prenumeranten. I din prenumerationsfunktion kan du utföra någon logik för att ta reda på vilken observerbar ditt värde kom från.
