重置 ReplaySubject 值

Reset ReplaySubject value

我有这样的文件结构:

facade 我有:

...
getArticles(): Observable<Article> {
  return this.articleService.fetchAll();
}
...

state我有:

...
triggerArticlesFetch$ = new ReplaySubject<void>(1);

articles$ = this.triggerArticlesFetch$.pipe(
  switchMap(() => this.fc.getArticles()),
  shareReplay(1)
);

loadArticles(): void {
  this.triggerArticlesFetch$.next();
}

getArticles(): Observable<ArticleShare[]> {
  return this.articles$;
}
...

最后在 component 我有:

...
`
  <span> {{ articles$ | async | json }} </span>
`
...
...
articles$: Observable<Article> = this.st.getArticles();

ngOnInit() {
  this.st.loadArticles();
}
...

但是我对 'invalidating' 这个数据有一些问题(组件是可重用的 - 状态包含以前的数据)。

每次我调用 loadArticles() 时,clear/reset 到 []/null articles$(可能在状态文件中)的最佳方法是什么?

根据我的评论(据我了解)展开,每次初始化组件时,可观察对象都应以 [](或 null)开头。我能想到的最快解决方法是将 startWith 通过管道传输到源。

尝试以下方法

状态

...
triggerArticlesFetch$ = new ReplaySubject<void>(1);

articles$ = this.triggerArticlesFetch$.pipe(
  switchMap(() => 
    this.fc.getArticles().pipe(
      startWith([]) // or `null` as per requirement
    )
  ),
  shareReplay(1)
);