Вторая подписка не начинается после switchMap с первой в RXJS - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть этот рабочий код. Он извлекает идентификатор из маршрутизатора и применяет его в качестве параметра для загрузки данных для компонента.

this.route.params.subscribe(_ => {
  this.id = _.id;
  this.service.getMineral(this.id)
    .subscribe(suc => this.data = suc, err => console.log(err));
  }
);

Затем я попытался поиграть с лучшими подходами и хочу вызвать вторую подписку, когда первый завершается. Согласно второму примеру в этом ответе , я должен поделиться первым результатом, а затем переключить карту, чтобы отписаться от нее и перейти к следующему. Поэтому я реализовал следующее.

const route$ = this.route.params.pipe(share());
const data$ = route$.pipe(
  switchMap(() => this.service.getMineral(this.id)));

route$.subscribe(_ => this.id = _.id);
data$.subscribe(suc => this.data = suc, err => console.log(err));

К сожалению, это не вызывает обращения к серверу и никакие данные не доставляются клиенту. Попробовав несколько изменений, я сдался из-за нехватки идей.

Какая значительная разница между этими двумя подходами? Где я могу запутаться в своей интерпретации второго образца?

1 Ответ

1 голос
/ 09 февраля 2020

Я думаю, что ваш подход плох. Вы должны связать это в одну наблюдаемую и подписаться на нее. Что-то вроде

 this.route.params.pipe(
    switchMap(params => this.service.getMineral(params.id))).subscribe()  
...