RxJS提供了一个名为forkJoin
的函数。它允许您输入多个Observables
并等待所有这些完成。我想知道结果数组是否将包含与输入observable的顺序相同的顺序的结果。如果没有,哪一个运营商确实维持相同的订单?我一直在研究docs并且无法找到答案。
答案 0 :(得分:7)
它将以相同的顺序返回结果。如these official docs中所述。
值得一提的是,它只会发出最新的流值:
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]
答案 1 :(得分:1)
对于我们这个实际上想要获得按任务完成时间排序的结果的人,您可以使用以下替代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 on buffer and unsubscribe after
merge(t1,t2,t3,t4)
.pipe(bufferCount(4), take(1))
.subscribe(console.log)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.5/rxjs.umd.min.js" integrity="sha256-85uCh8dPb35sH3WK435rtYUKALbcvEQFC65eg+raeuc=" crossorigin="anonymous"></script>