繁体   English   中英

不调用带有ReplaySubject的forkJoin.subscribe

[英]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.subscribev2.subscribe被调用,但不combo.subscribe 我怎么了 如何解决此问题?

forkJoin等待输入可观察值完成,然后发出最后一个发出的项。 您必须完成两个主题。

一旦所有输入可观察值完成, forkJoin将只发出所有最后一个值的数组。 如果您手动完成v1v2 ,则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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM