使用热观测值时,我遇到了问题。



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();

09-25 11:40