У меня есть этот рабочий код. Он извлекает идентификатор из маршрутизатора и применяет его в качестве параметра для загрузки данных для компонента.
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));
К сожалению, это не вызывает обращения к серверу и никакие данные не доставляются клиенту. Попробовав несколько изменений, я сдался из-за нехватки идей.
Какая значительная разница между этими двумя подходами? Где я могу запутаться в своей интерпретации второго образца?