Rxjs:Observable.combineLatest 对比 Observable.forkJoin
Rxjs: Observable.combineLatest vs Observable.forkJoin
我想知道 Observable.combineLatest
和 Observable.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 不同。
我想知道 Observable.combineLatest
和 Observable.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 不同。