У меня BehaviorSubject (selected_org), выбранный из одной службы (organisationService), и значение сопоставлено с вызовом API для извлечения соответствующих записей
this.testObs$ = this.organisationService.selected_org.asObservable()
.pipe(
map((item: IOrganisationDetails) => item.id),
tap(res => console.log('4444444444444444444444444444444444', res)),
switchMap(orgId => this.schedulerGeneralService.getAllTaskTypes(orgId)),
tap(ele => console.log('--------------------------------', ele))
);
вот метод getAllTaskTypes :
getAllTaskTypes(orgId?: string, enabled: boolean = true) {
return this.http.get<IOrganisationTaskType[]>(fillTemplate(ENDPOINTS.SCHEDULER.ORG_TASK_TYPES.GET,
{ org_id: orgId, enabledInd: enabled }));
fillTemplate формирует URL для выполнения http-вызова.
Ожидаемое поведение: При отправке новых значений объектом BehaviorSubject он должен вызвать switchMap и получить все соответствующие детали. Также при подписке testObs $ он напечатает журнал консоли с '4444444444444444444444444444444444' и извлечет все записи из соответствующего API.
Фактическое поведение: BehaviorSubject (selected_org) испускает новые значения, но из-за использования switchMap он не запускается, а testObs $ не выдает никаких новых значений. Он не вызывает Observable и не выдает никакого значения, хотя я подписываюсь на testObs $ Observable.
Когда я использую оператор 'map' вместо switchMap, он испускает значение с изменением значения BehaviorSubject, но он генерирует несколько наблюдаемых, что не является моим желаемый результат.
Может ли кто-нибудь помочь мне понять, где именно я делаю ошибку?
Спасибо