Я не понимаю, как внешняя область видоизменяется внутренней областью, так как внутренняя область никогда не получает доступ к 'stuffId'.Что-то, что я не понимаю или что-то в этом роде?
Это потому, что this.route.queryParams
выдает значение более одного раза.
Каждый раз, когда значение выдается new подписка сделана на this.service.getState()
, и со временем внутренний subscribe()
вызовет перекрывающихся разрывов отладки.С точки зрения отладчика вы можете не осознавать, что отлаживаете две или более подписок одновременно.
Поскольку вы делаете это this.data = state
или this.data = specificState
, шаблон представления мигает .
Я рекомендую вам узнать об использовании switchMap
и операторов mergeMap
в Rxjs вместо вызова subscribe
из другой подписки.Вы должны вызывать только внутреннюю подписку для краткосрочной наблюдаемой, которая будет завершена.
this.route.queryParams
.pipe(
map((params: Params) => params.stuffId),
switchMap(stuffId => combineLatest([
of(stuffId),
this.service.getState()
])),
map(([stuffId, state]) => {
if (!stuffId) {
return state;
}
const specificStuff: Stuff[] = state.stuff.filter((s) => s.id === stuffId);
return {
stuff: specificStuff,
tableData: this.service.getTableModel(specificStuff),
chartData: this.service.getChartModel({stuff: specificStuff}),
hasAssetId: true,
};
})
).subscribe(data => this.data = data);