0

两者都用于连接多个流。

由此 我对两者感到困惑,我阅读了 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 秒。

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

4

1 回答 1

3

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

所以在这个用例中,你会得到相同的结果。如果您concat()改为使用,您会看到不同之处,因为concat()订阅源是一个接一个的顺序。

forkJoin和之间的区别在于,当所有源 Observable 至少发射一个项目时,它只会发射一次,而在combineLatest每次任何源 Observable 在它们至少发射一次后发射时,都会发射。forkJoincombineLatest

于 2020-11-17T11:21:09.273 回答