我想知道 Observable.combineLatest和 Observable.forkJoin有什么不同?
Observable.combineLatest
Observable.forkJoin
在我看来,唯一的区别是,forkJoin预计 Observables 项目将完工,而 combineLatest返回的是最新的数值。
forkJoin
combineLatest
forkJoin不仅要求完成所有输入可观测值,而且还返回一个可观测值,该可观测值产生一个值,该值是输入可观测值产生的最后一个值的数组。换句话说,它等待最后一个输入可观察值完成,然后生成一个值并完成。
相比之下,一旦所有输入可观察值都产生了至少一个值,combineLatest返回一个每次输入可观察值产生一个新值的观察值。这意味着它可能有无限的值,并且可能不完整。它还意味着输入可观察值在产生值之前不必完成。
并行运行可观测值,每次发出一个值一个可观测值发出一个值 之后所有可观测值都发出 at least one value。
并行运行观测数据,一旦所有观测数据都有 完成,就运行 发出单个值。
如果任何可观察到的错误输出-使用 combineLatest,它将发出直到错误被抛出的点。如果任何可观测的错误发生,forkJoin将返回一个错误。
高级说明: CombinLatest 不会只为每个源获取一个值,然后转移到下一个源。如果您需要确保只为每个可观察源获得“下一个可用项目”,则可以在将 .pipe(take(1))添加到输入数组时将其添加到可观察源。
.pipe(take(1))
forkJoin -当所有可观察数据都完成时,从每个数据库发出最后一个发出的值。
ComineLatest -当任何可观察值发出一个值时,发出每个值的最新值。
用法非常相似,但你不应该忘记从 combineLatest退订,不像 分叉加入。
有一个角度的情况可以更好地解释它。假设在角度分量中有一个变化检测,那么最新的值就被改变了。在 combineLatest的 pipe和 tap方法中,代码也会被触发。如果最新的值被变化检测改变了 N次,那么 tap方法也会被触发 N次。
pipe
tap
N