最新版本与观察版本的对比

我想知道 Observable.combineLatestObservable.forkJoin有什么不同?

在我看来,唯一的区别是,forkJoin预计 Observables 项目将完工,而 combineLatest返回的是最新的数值。

66619 次浏览

forkJoin不仅要求完成所有输入可观测值,而且还返回一个可观测值,该可观测值产生一个值,该值是输入可观测值产生的最后一个值的数组。换句话说,它等待最后一个输入可观察值完成,然后生成一个值并完成。

相比之下,一旦所有输入可观察值都产生了至少一个值,combineLatest返回一个每次输入可观察值产生一个新值的观察值。这意味着它可能有无限的值,并且可能不完整。它还意味着输入可观察值在产生值之前不必完成。

组合最新(...)

并行运行可观测值,每次发出一个值一个可观测值发出一个值 之后所有可观测值都发出 at least one value

combineLatest example

forkJoin (...)

并行运行观测数据,一旦所有观测数据都有 完成,就运行 发出单个值

forkJoin example

对错误处理的考虑:

如果任何可观察到的错误输出-使用 combineLatest,它将发出直到错误被抛出的点。如果任何可观测的错误发生,forkJoin将返回一个错误。


高级说明: CombinLatest 不会只为每个源获取一个值,然后转移到下一个源。如果您需要确保只为每个可观察源获得“下一个可用项目”,则可以在将 .pipe(take(1))添加到输入数组时将其添加到可观察源。

forkJoin -当所有可观察数据都完成时,从每个数据库发出最后一个发出的值。

ComineLatest -当任何可观察值发出一个值时,发出每个值的最新值。

用法非常相似,但你不应该忘记从 combineLatest退订,不像 分叉加入

有一个角度的情况可以更好地解释它。假设在角度分量中有一个变化检测,那么最新的值就被改变了。在 combineLatestpipetap方法中,代码也会被触发。如果最新的值被变化检测改变了 N次,那么 tap方法也会被触发 N次。