Вы, вероятно, хотите использовать оператор .concatMap
. Хотя .mergeMap
.switchMap
тоже подойдет.
Упрощенный код:
this.loginService.getLoginData()
.do((data) => this.storeTheData)
.concatMap((logindata) => this.loginService.getPlaces())
.concatMap((placesdata) => this.loginService.postAccount())
.subscribe()
Поскольку у вас действительно много побочных эффектов, а ваш код не является полностью реактивным, к этому также существует другой подход. Вы можете прослушать сохраненные изменения данных для входа, чтобы загрузить другие данные для вас. Я собираюсь изложить простую версию того, что может не иметь особого смысла.
class Store {
loginData = new ReplaySubject<LoginData>(1);
placesData = new ReplaySubject<PlacesData>(1);
}
class AuthService {
constructor(private store: Store, private http: Http) {
}
login() {
this.http.post("login").subscribe(data => this.store.loginData.next(data));
}
}
class PlacesService {
constructor(store: Store, http: Http) {
store.loginData
.switchMap((loginData) => http.get("places" + loginData.placesId))
.subscribe(places => store.places.next(places)
}
}