forkjoin和combineLatest rxjs之间的区别

Sun*_*arg 2 fork-join observable rxjs combinelatest

两者都用于连接多个流。

由此 我对两者感到困惑,我读了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));
Run Code Online (Sandbox Code Playgroud)

打印

5004
5014
Run Code Online (Sandbox Code Playgroud)

每次结果约为5秒,如果combineLatest按顺序发送请求,那么为什么它打印持续时间约为5秒。

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

mar*_*tin 5

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

因此,在这个用例中,您将得到相同的结果。如果您concat()改为使用,您会看到差异,因为concat()按顺序订阅源一个接一个。

forkJoin和之间的区别combineLatest在于,forkJoin当所有源 Observable 发出至少一项时,只会发出一次,而完成 whilecombineLatest会在任何源 Observable 至少发出一次后每次发出时发出一次。