RxJS switchMap和publishReplay无法按预期运行

时间:2018-10-19 19:28:02

标签: rxjs

在从Promise创建的Observable上使用switchMap时,publishReplay不会触发任何事件。

this.detail = this.route.params.pipe(
  switchMap((params) => from(this.service.get(params.id))),
  publishReplay(1)
);

this.detail.subscribe((data) => console.log(data));

但以下内容可以

this.detail = this.route.params.pipe(
  switchMap((params) => from(this.service.get(params.id)))
);

this.detail.subscribe((data) => console.log(data));

后者的问题是Observable很冷,并且在每个订阅上执行Promise链,这是不希望的。解决方案是

detail: ReplaySubject<any> = new ReplaySubject();

this.route.params.pipe(
  switchMap((params) => from(this.trunkModelService.get(params.id)))
).subscribe(this.detail);

this.detail.subscribe((data) => console.log(data));

任何人都可以解释第一个代码段中的情况吗?

0 个答案:

没有答案