2017-09-27 94 views
0

下面是描述我想要做的事情的片段。在我的應用程序中,我有一個遍及使用的replayysubject。在某個時刻,我想獲得主題發出的最後一個值,但last似乎無法在ReplaySubject上工作。如何從ReplaySubject獲取最後一個值?

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 

var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

FIDDLE

上面的代碼不火的lastObserver什麼,但認購的作品就好了。

回答

1

也許你的困惑是關於.last()運營商應該如何工作?

.last()應該等待一個流完成,然後給你在流結束之前發出的最後一個值。所以爲了使它工作,流將需要結束。

我相信只要主題完成,您的lastObserver就會發光。

const subject = new Rx.ReplaySubject(); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.next(4); 

subject.subscribe(num => console.log(num)); 
subject.complete(); // end your stream here 
var lastObserver = subject.last(); 
lastObserver.subscribe(num => console.log('last: ' + num)); 

如果你不希望在信息流要結束了,但你希望用戶能夠接收訂閱之前發出的最後的值,考慮深遠的BehaviorSubject,這是專爲這種使用情況。

+0

那麼如果我完成沒有其他訂戶會得到更新? – Smeegs

+0

沒錯。如果您需要新用戶在訂閱後立即收到最後一個發佈,請拋棄'ReplaySubject' +'last',而只是使用'BehaviorSubject'。 – xtianjohns

+0

我確信我使用了錯誤的主題,但我不確定這是否正確。讓我解釋一下情況。這是一個發出api調用結果的主題。大部分用戶希望下一個發射不是最後一個。但是,有一種情況我想看看最後發出的是什麼。 – Smeegs

相關問題