使用重复数据处理可观察量

时间:2018-01-10 12:12:50

标签: rxjs observable

我有一个包含数据的Observable。

 comments: Observable<Comment> 

然后我调用getComments()方法。

当我滚动到列表的完成时,我调用getComments方法,以获取下一个较旧的注释。

但如果在我向下滚动的时候添加新评论,我会再次收到最早的评论,因为新闻评论会在开头添加。

实际上我正在使用它:

this.comments.concat(<Comment[]>data)
    .distinct(x => x.id)
    .subscribe()

但我不确定这是否是正确的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用BehaviorSubject。每次都有新的评论,汇总数据。例如:

import { of } from 'rxjs/observable/of';
import { zip } from 'rxjs/observable/zip';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

comments = new BehaviorSubject([]);

getComments() {

  // data from api
  const newComments$ = of([
    { id: 6, name: 'f' },
    { id: 7, name: 'g' }
  ]);

  zip(newComments$, this.comments)
    .subscribe(([newComm, oldComm]) => {
      this.comments.next(newComm.concat(oldComm));
    });
}

ngOnInit() {
    // since it's a behavior subject, you can subscribe like observable
    this.comments.subscribe(x => {
       // do whatever you want
    })
}