繁体   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