angular - Extrahera rörbar operator som funktion i RXJS
Jag har följande kod
this.form.valueChanges.pipe(
take(1),
map(val => // doSomething),
exhaustMap(val =>
// someInner observable logic
return of({someValue})
)
).subscribe(finalVal => doSomething());
Nu upprepas denna kod i exhaustMap i flera komponenter och jag skulle vilja extrahera den som en extern funktion.
Jag har försökt följande
myExhaust(obs: Observable<any>): Observable<{ someValue: SomeClass }> {
return obs.pipe(
exhaustMap((val) => {
// do some stuff
return of({someValue})
})
);
}
Men sedan vet jag inte hur jag ska koppla in det i den ursprungliga koden (om funktionens kod själv är korrekt)
Svar #1
Du skapar i princip en anpassad operator. Du är på rätt spår. Du måste göra en funktion som tar en observerbar och returnerar en ny.
function myExhaust<T>(): MonoTypeOperatorFunction<T> {
return input$ => input$.pipe(
exhaustMap((val) => {
// do some stuff
return of({someValue})
}))
}
Nu kan du använda myExhaust istället för exaustMap i ditt rör.
Svar #2
Din utility verkar bra och här är hur du kan skicka utilityn till pipen:
this.form.valueChanges.pipe(
take(1),
myExhaust,
).subscribe(finalVal => doSomething());
Här är det fungerande exemplet
