我只使用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$开放用户。

有一个不错的

09-11 08:33