В приведенном ниже коде this.busyCount++
вызывается только один раз за вызов моего метода get, но this.busyCount--
внутри tap()
вызывается несколько раз.Это приводит к тому, что isBusy
всегда ложно.
Как правильно увеличить или уменьшить busyCount
, чтобы узнать, существует ли активный http-запрос.
showBusy
параметр определяет, отображается или нет загрузочный счетчик.Я не уверен, как передать это перехватчику, или я мог бы использовать подход здесь .
Я пытался использовать оператор finalize для уменьшения, но я столкнулся с той же проблемой.
@Injectable()
export class DataService {
constructor(private http: HttpClient) { }
public busyCount = 0;
public get isBusy(): boolean { return this.busyCount > 0; }
get<T>(relativeUrl: string, showBusy: boolean = true): Observable<T> {
if (showBusy)
this.busyCount++;
return this.http.get<T>(`${this.baseURL}${relativeUrl}`)
.pipe(
tap(s => {
if (showBusy)
this.busyCount--;
}),
catchError((err: HttpErrorResponse) => {
if (showBusy)
this.busyCount--;
return Observable.throw(err)
})
);
}
}