Rxjs:Observable.combineLatest 对比 Observable.forkJoin

Rxjs: Observable.combineLatest vs Observable.forkJoin

我想知道 Observable.combineLatestObservable.forkJoin 之间有什么区别?

据我所知,唯一的区别是 forkJoin 期望 Observables 完成,而 combineLatest returns 最新值。

不仅 forkJoin 需要完成所有输入 observable,而且 returns 一个产生单个值的 observable,该值是输入 observable 产生的最后一个值的数组。换句话说,它会等到最后一个输入 observable 完成,然后产生一个单一的值并完成。

相比之下,combineLatest returns 一个 Observable,一旦所有输入 observable 都产生了至少一个值,每次输入 observable 都会产生一个新值。这意味着它可能具有无限值并且可能无法完成。这也意味着输入可观察对象不必在产生值之前完成。

combineLatest(...)

并行运行 observables,每次发射一个值一个 observable 发射一个值所有 observables 发射后至少一个值.

forkJoin(...)

并行运行 observable,一旦所有 observable 完成发出一个值

错误处理的注意事项:

如果任何 observables 出错 - combineLatest 它将发出直到抛出错误的点。 forkJoin 如果任何 observables 出错,将只返回一个错误。


高级说明:CombineLatest 不只是为每个源获取单个值然后移动到下一个。如果您需要确保只为每个源可观察对象获取 'next available item',您可以在将源可观察对象添加到输入数组时将 .pipe(take(1)) 添加到源可观察对象。

forkJoin - 当所有 observables 完成时,发出每个 observables 的最后一个发射值。

combineLatest - 当任何 observable 发出一个值时,从每个 observable 发出最新值。

用法非常相似,但您不应该忘记取消订阅 combineLatest,这与 forkJoin 不同。