У меня есть наблюдаемое в моем angular 8 проекте, и я подписываюсь в ngOnInit ().
export class ChartComponent implements OnInit {
urlSubject: Subject<string> = new Subject();
isLoading: BehaviorSubject<boolean> = new BehaviorSubject(false);
chartData: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);
dataSubscription: Subscription;
dataObservable: Observable<any> = this.urlSubject.pipe(
switchMap((url: any) => this.httpClient.get<any[]>(url))
)
ngOnInit() {
this.dataSubscription = this.dataObservable
.pipe(tap(() => this.isLoading.next(true)))
.pipe(map((response: any) => response.result))
.subscribe((response: any) => this.chartData.next(response),
() => this.isLoading.next(false),
() => this.isLoading.next(false));
this.urlSubject.next(this.data.settings.dataEndpoint)
}
}
Но метод complate не запускает подписку.
Я подписываюсь на chartData
этот тип BehaviourSubject
. Поэтому я не подписываюсь на urlSubject
. Потому что URL может измениться в любое время для параметров поиска или фильтра.
Я использую finilize, но он не работает. Я думаю, что эта проблема связана с внутренними процессами switchmap. Как я могу завершить и установить загрузку в ложь?