J'essaie de créer une fonction qui englobe un Observable donné et lui ajoute un écran de chargement.
La fonction function wrapWithLoadingScreen<T>(obs$: Observable<T>): Observable<T>
devrait fonctionner comme suit :
- afficher l'écran de chargement.
- exécuter l'observable reçu en tant que paramètre
- cacher l'écran de chargement après l'émission de toutes les valeurs.
Mon idée initiale de mise en œuvre était la suivante :
function wrapWithLoadingScreen<T>(obs$: Observable<T>): Observable<T> {
return of(null).pipe(
tap(() => console.log("show loading screen")),
switchMap(() => obs$),
finalize(() => console.log("hide loading screen"))
);
}
Mais lorsque j'enchaîne d'autres opérateurs au résultat de cette fonction, "hide loading screen" est exécuté après ces chaînes (et non après la fin de l'observable original).
En voici un exemple : https://stackblitz.com/edit/rxjs-wrapping-observable
le résultat dans la console de ce qui précède est
show loading screen
im reducing
im reducing
reducing finished so loading screen should be hidden
the result is 6
hide loading screen
Ce que je vise devrait être
show loading screen
im reducing
im reducing
hide loading screen
reducing finished so loading screen should be hidden
the result is 6