RxJS publishReplay与publishLast

时间:2017-06-07 12:00:17

标签: javascript rxjs

我正在Angular应用程序中实现缓存HTTP结果。据我所知,以下代码都有效,但我需要知道他们是否正在做完全相同的事情,或者我错过了一些重要的事情?

publishLast

getPosts() {
    if( !this.posts$ ) {
      this.posts$ = this.http.get('api').publishLast().refCount();
      return this.posts$;
    }

    return this.posts$;
  }

publishReplay

getPosts() {
  if( !this.posts$ ) {
    this.posts$ = this.http.get('api').publishReplay(1).refCount();
       return this.posts$;
  }

  return this.posts$;
}

1 个答案:

答案 0 :(得分:14)

publishLast份额(顾名思义)最后排放值 - 只能在流完成时确定。

publishReplay(1)分享最新排放值,这是在任何排放后完成的。

如果this.http.get(...)行为相同,因为流会在收到结果后完成,因此最后最新值是一回事。

对于发出多个值但在发出此值后不立即完成的流,您会得到不同的结果。