Wou*_*ter 9 javascript rxjs typescript
RxJS提供了一个名为的函数forkJoin.它允许您输入多个Observables并等待所有这些完成.我想知道结果数组是否将包含与输入observable的顺序相同的顺序的结果.如果没有,哪一个运营商确实保持相同的订单?我一直在研究文档而无法找到答案.
DDR*_*one 12
它将以相同的顺序返回结果.正如这些官方文档中所描述的那样.
很高兴提到它只会发出流的最新值:
var source = Rx.Observable.forkJoin(
Rx.Observable.of(1,2,3),
Rx.Observable.of(4)
);
source.subscribe(x => console.log("Result", x));
// LOG: Result [3,4]
Run Code Online (Sandbox Code Playgroud)
对于我们这些真正想要按任务完成时间排序的结果的人来说,您可以使用以下 forkJoin 的替代方案
const { merge, of } = rxjs;
const { bufferCount, take, delay } = rxjs.operators;
let t1 = of(1).pipe(delay(1000));
let t2 = of(2).pipe(delay(3000));
let t3 = of(3).pipe(delay(4000));
let t4 = of(4).pipe(delay(2000));
// in forkJoin(t1,t2,t3,t4) we get: [1,2,3,4]
// in this we get sorted by finish time: [1,4,2,3]
// bufferCount(4) join 4 results to array
// take(1) take one buffer and unsubscribe after
merge(t1,t2,t3,t4)
.pipe(bufferCount(4), take(1))
.subscribe(console.log)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.5/rxjs.umd.min.js" integrity="sha256-85uCh8dPb35sH3WK435rtYUKALbcvEQFC65eg+raeuc=" crossorigin="anonymous"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |