forkjoin和CombineTest rxjs之间的差异

forkjoin和CombineTest rxjs之间的差异,rxjs,observable,fork-join,combinelatest,Rxjs,Observable,Fork Join,Combinelatest,两者都用于连接多个流 我对这两者感到困惑,我读到CombineTest在同步模式下进行调用和forkJoin并行调用 我正在尝试这个 combineLatest([ of(null).pipe(delay(5000)), of(null).pipe(delay(5000)), of(null).pipe(delay(5000)) ]).subscribe(() => console.log(new Date().getTime() - star

两者都用于连接多个流

我对这两者感到困惑,我读到CombineTest在同步模式下进行调用和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秒左右,如果CombineTest按顺序发送请求,那么为什么打印持续时间在5秒左右


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

都并行订阅所有源观测值,它们是否异步只取决于每个源观测值

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


forkJoin
combinelatetest
之间的区别在于,
forkJoin
将只在所有源可观测项发出至少一个项并完成时发出一次,而
combinelatetest
将在任何源可观测项发出至少一次后,每次发出时发出一次。

都订阅所有并行的源观测值以及它们是否异步只取决于每个源观测值

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


forkJoin
combinelatetest
之间的区别在于,
forkJoin
将只在所有源可观测项发出至少一个项并完成时发出一次,而
combinelatetest
将在任何源可观测项发出至少一次后每次发出。

我使用的错误CombineTest和两个http调用,但在这种情况下,我只得到一次结果,因此,如果CombineTest每次在其中一个源发出时发出,那么我应该得到两个调用?
CombineTest
将在任何源观测值发出至少一次后每次发出时发出。concat我想现在不推荐使用了?
concat
没有不推荐使用。根据您使用的RxJS版本的不同,它可能会从“RxJS”导入为
import{concatWith}或使用v6
从“rxjs”导入{concat}
forkJoin
在所有源使用每个可观察源的最新值完成后只会发出一次。我错误地将CombineTest与两个http调用一起使用,但在这种情况下,我只得到一次结果,因此,如果CombineTest每次在其中一个源发出时发出,那么我应该得到两个调用?
CombineTest
将在任何源观测值发出至少一次后每次发出时发出。concat我想现在不推荐使用了?
concat
没有不推荐使用。根据您使用的RxJS版本的不同,它可能会从“RxJS”导入为
import{concatWith}或使用v6
从“rxjs”导入{concat}
forkJoin
将在所有源完成后仅发射一次,且每个可观测源的最新值都将发出。