我想创建一个 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');
Run Code Online (Sandbox Code Playgroud)
两者v1.subscribe都v2.subscribe被称为 ,但不是combo.subscribe。我有什么错吗?如何解决这个问题?
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();Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>Run Code Online (Sandbox Code Playgroud)
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) )Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |