当前位置:  开发笔记 > 编程语言 > 正文

Rxjs:Observable.combineLatest vs Observable.forkJoin

如何解决《Rxjs:Observable.combineLatestvsObservable.forkJoin》经验,为你挑选了2个好方法。

只是想知道Observable.combineLatest和 之间的区别是什么Observable.forkJoin?据我所知,唯一的区别是forkJoin期望Observables完成,同时combineLatest返回最新的值.



1> GregL..:

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

相反,combineLatest一旦所有输入的observable都产生了至少一个值,则返回一个Observable,每次输入observable都会生成一个新值.这意味着它可能具有无限值并且可能无法完成.它还意味着输入observable不必在生成值之前完成.


@Tukkan,我将链接一个从错误中恢复的运算符到每个http可观察的对象,以便您定义用于每个错误请求的值,而不是寻找将多个可能出错的可观察对象组合在一起的操作员(I (不确定是否存在这样的运算符)。从错误中恢复的运算符包括.catch()、. onErrorResumeNext()以及可能的.retry()(如果Http调用可能会间歇性失败)。

2> Simon_Weaver..:

也:

CombineLatest(...)按顺序依次运行可观察对象

combineLatest内部使用concat,这意味着必须在移动到下一个数组之前为数组中的每个可观察值获取一个值。

// partial source of static combineLatest (uses the rxjs/operators combineLatest internally):
// If you're using typescript then the output array will be strongly typed based on type inference
return function (source) { return source.lift.call(from_1.from([source].concat(observables)), 
                           new combineLatest_1.CombineLatestOperator(project)); };

forkJoin(...)同时并行运行可观察对象

如果您有3个源可观察物,并且它们分别需要5秒钟才能运行,那么将需要15秒钟combineLatest才能运行。而forkJoin它们是并行执行的,因此需要5秒钟。

因此,其forkJoin工作方式更像Promise.all(...)是不执行命令的地方。

错误处理注意事项:

如果有任何可观察到的错误,combineLatest那么后续的将不会执行,但forkJoin它们都将运行。因此combineLatest,执行可观察值的“序列”并一起收集结果可能很有用。


高级说明:如果源可观测对象已经在“运行”(由其他对象订阅)并且正在使用share它们-那么您将不会看到此行为。

更高级的注释:CombineLatest将始终为您提供每个来源的最新信息,因此,如果其中一个来源可观察对象发出多个值,您将获得最新信息。它不仅为每个来源获取一个值,然后移至下一个。如果需要确保每个可观察.pipe(take(1))到的源仅获得“下一个可用项目”,则可以在将其添加到输入数组时将其添加到可观察到的源。

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有