我只使用shareReplay
调用一次一次(如缓存)来获取某些信息:
为我服务:
getProfile(): Observable<Customer> {
return this.callWS().pipe(shareReplay(1));
}
在多个组成部分中:
this.myService.getProfile().subscribe(customer => {
console.log('customer informations has been retrieved from WS :', customer);
});
现在,我想添加一种强制刷新信息的方法(仅绕过一次shareReplay)。我尝试将我的observable存储在一个变量中,然后在将其初始化之前将其设置为null,但这似乎破坏了组件的订阅。
有什么帮助吗?
谢谢
最佳答案
我知道该线程很旧,但是我想我知道其他答案关于在“重置”主题之前添加新值的含义。检查以下示例:
private _refreshProfile$ = new BehaviorSubject<void>(undefined);
public profile$: Observable<Customer> = _refreshProfile$
.pipe(
switchMapTo(this.callWS()),
shareReplay(1),
);
public refreshProfile() {
this._refreshProfile$.next();
}
在以上代码段中,所有
profile$
新订阅者都将收到最新发出的值(调用callWS()
一次)。如果您希望“刷新”正在共享的客户,则可以调用“refreshProfile()”。这将发出一个通过switchMapTo
的新值,重新分配重播值,并通知任何profile$
开放用户。有一个不错的