forkjoin 和 combineLatest rxjs 的区别

difference between forkjoin and combineLatest rxjs

两者都用于加入多个流。

我对两者感到困惑,我阅读了同步模式下的 combineLatest 调用和并行的 forkJoin 调用,

我正在尝试这个

combineLatest([
      of(null).pipe(delay(5000)),
      of(null).pipe(delay(5000)),
      of(null).pipe(delay(5000))
    ]).subscribe(() => console.log(new Date().getTime() - start));

forkJoin([
      of(null).pipe(delay(5000)),
      of(null).pipe(delay(5000)),
      of(null).pipe(delay(5000))
    ]).subscribe(() => console.log(new Date().getTime() - start));

打印

5004
5014

每次结果都在5秒左右,如果combineLatest按顺序发送请求那么为什么打印持续时间在5秒左右

这是正确的还是有任何其他区别,有示例代码吗?

两者都是并行订阅所有源Observable,是否异步只取决于每个源Observable。

所以在这个用例中你会得到相同的结果。如果您使用 concat() 而不是,您会看到差异,因为 concat() 一个接一个地订阅源。

forkJoincombineLatest 之间的区别是 forkJoin 只会在所有源 Observable 至少发射一个项目并完成时发射一次,而 combineLatest 会发射每任何源 Observables 在它们至少发射一次后发射的时间。