2017-06-07 25 views
2

我在Angular應用程序中實現緩存HTTP結果。從我所瞭解的以下兩種代碼都適用,但我需要知道他們是否正在做正好是同一件事,或者我錯過了一些重要的東西?RxJS publishReplay vs publishLast

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$; 
} 

回答

11

publishLast股(顧名思義)的最後發射值 - 這隻能被確定在流完成

publishReplay(1)股票最新排放值,這是排放後,完成。


this.http.get(...)行爲的情況是一樣的,因爲接收後的結果,因此最後最新值都是一樣的東西流將完成。

儘管對於發出多個值或在發送此值後不立即完成的流,您將得到不同的結果。

+0

但是錯誤呢?當HTTP服務發出錯誤時,它不會調用完成。 – undefined

+0

是正確的,但在這種情況下,在兩種情況下都不會發生排放 - 您只會遇到錯誤 - 我還建議您不要直接發佈http請求 - 您應該訂閱它,然後將數據發佈到永久'ReplaySubject'(或'BehaviorSubject')如果請求成功或者在中心位置處理錯誤(如果它不成功)。 – olsn