【发布时间】:2022-11-09 05:20:14
【问题描述】:
如何从服务的方法返回共享的 observable? 我只想接到一个请求并在订阅者之间共享。 如果我将方法分配给公共字段,我可以获得预期的结果,但是我不能将参数传递给它。
这是服务:
@Injectable({
providedIn: 'root',
})
export class FetchService {
private entries$ = new Subject<number>();
constructor() {}
refreshEntries(id: number) {
this.entries$.next(id);
}
getEntries(id = 0) {
return this.entries$.pipe(
startWith(id),
mergeMap((id) => this.requestEntries(id)),
shareReplay(1),
);
}
requestEntries(id: number) {
console.log('requestEntries');
return of([1, 2, 3]);
}
}
和电话:
this.entries$ = this.service.getEntries(0); // called with async pipe in template
this.service.getEntries(0).subscribe((entries) => console.log(entries));
我希望 console.log('requestEntries') 被调用一次。
如果我在没有 getEntries 方法的情况下完成它,它会起作用,但是我可以将 id 传递给调用。 我暂时省略了带有 id 的代码,因为它返回了一些缓存数据。 Stackblitz
【问题讨论】:
标签: angular typescript rxjs observable rxjs-observables