Карта переключений rxjs наблюдаема, переменные сохраняются для финала - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно знать хорошую практику для этой проблемы.

Я звоню в три службы, которые работают с switchMaps, но мне нужна переменная первой службы для последней службы. Как лучше всего это делать?

Пример:

this.session.account.get()
.switchMap(account => this.employerApi.get(account.accountId))
.switchMap(employer => this.addressApi.get(employer.addressId))
.filter(address => address.numer % 2)
.subscribe(address => console.log(¿¿¿¿¿account.name?????, address.name));

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Не уверен, что это лучший способ сделать это, но вот способ сделать это:

this.session.account.get()
.switchMap(account => zip(Observable.from(account), this.employerApi.get(account.accountId))
.switchMap((account, employer) => zip(Observable.from(account), this.addressApi.get(employer.addressId))
.filter((account,address) => address.numer % 2)
.subscribe((account,address) => console.log(¿¿¿¿¿account.name?????, address.name));

Однако с точки зрения передового опыта, я думаю, что вам нужен сериализатор в бэкэнде, который возвращает результаты в формате json, что-то вроде: { "account": account_object, "address" : address_object}.

0 голосов
/ 27 июня 2018

Самый простой способ - агрегировать значения по ходу:

this.session.account.get()
  .switchMap(account =>
    this.employerApi.get(account.accountId).map(employer => ({employer, account}))
  .switchMap(data => 
    this.addressApi.get(employer.addressId).map(address => ({...data, address}))
  .filter(data => data.address.number % 2)
  .subscribe(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...