-2

我有这个工作代码。它从路由器获取 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));

遗憾的是,这不会调用服务器,也不会将数据传递给客户端。在尝试了几次更改后,由于缺乏想法,我放弃了。

这两种方法之间的显着区别是什么?我在哪里对第二个样本的解释感到困惑?

4

1 回答 1

1

我认为你的方法很糟糕。您应该将其链接到一个 observable 并订阅它。就像是

 this.route.params.pipe(
    switchMap(params => this.service.getMineral(params.id))).subscribe()  
于 2020-02-08T23:13:28.863 回答