在从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));
任何人都可以解释第一个代码段中的情况吗?