簡體   English   中英

Rxjs:如何從可觀察對象中獲取最新的發射值

[英]Rxjs: how to get latest emitted value from a observable

如演示所示,如標題所示

 const { combineLatest, interval, of } = rxjs; const { first, last, sample, take, withLatestFrom } = rxjs.operators; const numbers = interval(1000); const takeFourNumbers = numbers.pipe(take(4)); takeFourNumbers.subscribe(x => console.log('Next: ', x)); setTimeout(()=>{ console.log('how can we get the latest value which is 1?'); takeFourNumbers.pipe(first()).subscribe(v=>console.log(v,'actual get')) },2500) // Logs: // Next: 0 // Next: 1 // how can we get the latest value which is 1? // Next: 2 // 0 actual get // Next: 3
 <script src="https://cdn.jsdelivr.net/npm/rxjs@7.5.5/dist/bundles/rxjs.umd.js"></script>

就我而言,我只想獲得最新的價值並做一份一次性工作。 我該怎么做?

我在想我們是否有像takeLatest()latest()這樣的運算符? 但是我沒有找到任何人。

問題歸結為共享提供者(數據源)或“熱與冷”可觀察對象,您希望在不同訂閱之間共享最新值,因此您基本上想要一個熱可觀察對象,從間隔運算符返回的可觀察對象是冷的,因此您需要天氣很熱,這樣做很簡單:

const takeFourNumbers = numbers.pipe(take(4), shareReplay(1));

現在不管你訂閱多少次,所有訂閱者都會分享價值

編輯:我的錯,它應該是 shareReplay 以便它在您訂閱它后立即為您提供最后發出的值所以現在您應該從 setTimeout 內的訂閱中獲得 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM