Я делаю HTTP-вызовы и хочу установить индикатор загрузки до выполнения HTTP-вызова. На данный момент я делаю:
this.loadingIndicatorService.setLoadingIndicatorOn(true)
this.cop.getunMappedTechnologyDetails().pipe(
finalize(() => {
this.loadingIndicatorService.setLoadingIndicatorOn(false);
}),
).subscribe(
res => {...}
Но я бы хотел установить индикатор загрузки внутри трубы, если это возможно, чтобы я мог быть уверен, что он работает, и чтобы я мог легко скопировать / вставить его в перед всеми моими подписками. (Я посмотрел на AOP, но в данном конкретном случае это кажется непрактичным)
нажатие не работает, потому что сначала выполняется выборка, а затем воздействие на результат, но я показываю его как визуальный для того, что я хочу получить:
this.cop.getunMappedTechnologyDetails().pipe(
tap(() => this.loadingIndicatorService.setLoadingIndicatorOn(true)),
finalize(() => {
this.loadingIndicatorService.setLoadingIndicatorOn(false);
}),
).subscribe(
res => {...}
Возможно, я тоже искал обобщенную функцию c, но сейчас мне нужно быстрое решение, где я мог бы вставить эти каналы перед моими подписками.
РЕДАКТИРОВАТЬ: я пробовал вариант Jan-Niklas Wortmann с defer, но я получаю сообщение об ошибке .pipe:
Затем я попытался использовать его внутри трубы:
this.cop.getunMappedSafeDetails().pipe(
defer(() => {
this.loadingIndicatorService.setLoadingIndicatorOn(true);
return this.cop.getunMappedSafeDetails();
}),
finalize(() => {
this.loadingIndicatorService.setLoadingIndicatorOn(false);
}),
).subscribe(...);
Но у меня ошибка:
Argument of type 'Observable<String[]>' is not assignable to parameter of type 'OperatorFunction<String[], {}>'.
Type 'Observable<String[]>' provides no match for the signature '(source: Observable<String[]>): Observable<{}>'.