[英]forkJoin.subscribe with ReplaySubject is not called
我想创建一个Observable,如果两个ReplaySubject实例都持有一个值,则将触发它。 我这样尝试过:
let v1 = new Rx.ReplaySubject();
let v2 = new Rx.ReplaySubject();
v1.next('X');
const combo = Rx.Observable.forkJoin(v1, v2)
combo.subscribe( arr => console.log(arr) )
v1.subscribe( s => console.log('v1', s) );
v2.subscribe( s => console.log('v2', s) );
v2.next('Y');
v1.subscribe
和v2.subscribe
被调用,但不combo.subscribe
。 我怎么了 如何解决此问题?
forkJoin等待输入可观察值完成,然后发出最后一个发出的项。 您必须完成两个主题。
一旦所有输入可观察值完成, forkJoin
将只发出所有最后一个值的数组。 如果您手动完成v1
和v2
,则combo
将发出:
let v1 = new rxjs.ReplaySubject(); let v2 = new rxjs.ReplaySubject(); v1.next('X'); v2.next('Y'); v2.next('Z'); // This additional value should demonstrate the idea of forkJoin const combo = rxjs.forkJoin(v1, v2) combo.subscribe( arr => console.log(arr) ) v1.complete(); v2.complete();
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
如果您不希望内部的可观察对象完成,那么您可能正在寻找combineLatest
:
let v1 = new rxjs.ReplaySubject(); let v2 = new rxjs.ReplaySubject(); v1.next('X'); v2.next('Y'); const combo = rxjs.combineLatest(v1, v2) combo.subscribe( arr => console.log(arr) )
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.