RxJS forkJoin会按顺序返回结果吗?

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)

  • 这是正确的答案,它给出了示例和文档链接 (2认同)

Kam*_*ski 6

反答

对于我们这些真正想要按任务完成时间排序的结果的人来说,您可以使用以下 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)