我有这个工作代码。它从路由器获取 ID 并将其作为参数应用,以加载组件的数据。
this.route.params.subscribe(_ => {
this.id = _.id;
this.service.getMineral(this.id)
.subscribe(suc => this.data = suc, err => console.log(err));
}
);
然后,我尝试使用更好的方法,并希望在第一个订阅完成时调用第二个订阅。根据此答案中的第二个示例,我应该分享第一个结果,然后切换 map 以取消订阅并继续下一个。所以我实现了以下。
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));
遗憾的是,这不会调用服务器,也不会将数据传递给客户端。在尝试了几次更改后,由于缺乏想法,我放弃了。
这两种方法之间的显着区别是什么?我在哪里对第二个样本的解释感到困惑?