BehaviourSubject и SwitchMap не работают вместе - PullRequest
0 голосов
/ 26 февраля 2020

У меня 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, но он генерирует несколько наблюдаемых, что не является моим желаемый результат.

Может ли кто-нибудь помочь мне понять, где именно я делаю ошибку?

Спасибо

...