2016-06-16 26 views
0

我剛剛讀了http://blog.thoughtram.io/angular/2016/06/16/cold-vs-hot-observables.html,我試圖讓publishLast處理一些基本的觀察對象,我不能,有人可以解釋爲什麼嗎?rxJs publishLast沒有刷新消息

 let obs = Observable.create((observer: Observer<number>): void => { 
     observer.next(234); 
    }) 
     .publishLast() 
     .refCount(); 

    obs.subscribe((v: number) => console.log("1st subscriber: " + v)); 
    setTimeout(() => { 
     obs.subscribe((v: number) => console.log("2nd subscriber: " + v)); 
    }, 1100); 

回答

1

我假設通過「沖洗」你的意思是你沒有收到你的訂閱塊中的任何事件。

的問題是,當它知道Observable不會排放任何更多的價值,它可以做到這一點的唯一方法是,如果你在Observer調用completepublishLast只能發出。

所以,你的代碼需要看起來像這樣:

let obs = Observable.create((observer: Observer<number>): void => { 
    observer.next(234); 
    observer.complete(); 
}) 
.publishLast() 
.refCount(); 
+0

非常感謝!我的用例是這樣的,我有一個behaviorSubject映射到一個http調用,並且我希望它將最後的結果返回給每個人,但是如果behaviorSubject改變它應該發起一個新的http調用,並且通知它的用戶。有什麼辦法可以做到這一點? – user2555964