Если я правильно понял вашу идею, вы хотите выполнить tap()
только в начале потоковой подписки, а не в другое время. Это мой пользовательский оператор для этого:
import { Observable, of } from 'rxjs';
import { switchMap, tap } from 'rxjs/operators';
export function startWithTap<T>(callback: () => void) {
return (source: Observable<T>) =>
of({}).pipe(tap(callback), switchMap((o) => source));
}
Как, например, для использования этого оператора будет:
this.api.getData().pipe(
startWithTap(() => this.loading.start()),
)
Это мой пример кода, где загрузка начинается, когда кто-то
подписывается на Observable, созданный сервисом API (посредством httpClient).