Я сталкиваюсь со случайным поведением оператора flatMap и не могу найти причину. Иногда срабатывает, иногда нет...
Вот ситуация: пользователь может изменить язык в моем приложении, поэтому у меня есть BehaviorSubject на языке (который запускается списком выбора), возвращаемый поставщиком в качестве наблюдаемого. Когда есть изменения, я вызываю (через flatMap) http-запрос для получения данных на выбранном языке.
Это выглядит так:
this.languageProvider.getLang$().flatMap(langCode => {
return this.http.get(`https://SERVER_URL.net/datas?lang=${langCode}`)
.map(data => data.json())
})
.subscribe(
data => {
// do smth
},
err => {
// do smth
}
);
Дело в том, что когда я меняю язык, чаще всего не срабатывает http-вызов.
Если я добавлю простую подписку, она всегда будет работать...
this.languageProvider.getLang$().subscribe(langCode => {
console.log(langCode);
});
Любая идея, почему у меня есть эта проблема?
Вот языковой провайдер:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class LanguageProvider {
private lang$: BehaviorSubject<string>;
constructor() {
this.lang$ = new BehaviorSubject('en');
}
setLang(langCode: string) {
this.lang$.next(langCode);
}
getLang$(): Observable<string> {
return this.lang$.asObservable();
}
}
Большое спасибо