使用热观测值时,我遇到了问题。
const partialState$ = Rx.Observable.of(1)
.publish().refCount();
const downstreamState$ = partialState$.map(v => ([v+1, v+2]));
const finalState$ = downstreamState$
// last value of partialState$ being requested -
// shouldn't matter if its completed through earlier chaining
.withLatestFrom(partialState$)
finalState$.subscribe(state => { // this does not fire
console.log('state', state);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-rc.5/Rx.js"></script>
这是小提琴:http://jsfiddle.net/j64te6jp/10/
上面的代码没有执行任何操作-似乎是由于订阅的同步行为,
partialState$
在推送到.subscribe
之前没有被标记为具有就绪值这永远不会发生,因为
partialState$
向downStreamState$
请求最新值时,尚无值。有人可以解释为什么会发生这种情况,也可以提供一种很好的方法来重用热门(已发布)可观察值中的相同值。谢谢。
最佳答案
发生这种情况是因为您在发出值之后进行了订阅。为什么不使用.publishReplay()
?
如果仍要避免使用publishReplay()
,则可以使用.delay(0)
:
const partialState$ = Rx.Observable.of(1).delay(0)
.publish().refCount();