我被来自concatMap的concatMap参数搞糊涂了,这听起来很像MAX_CONCURRENCY。
预取:要从当前可观察到的对象中预取的元素数。
Q1:它是否意味着从Observable预取元素以进行映射,然后按顺序一次订阅一个元素?
例如,concatMapSingle的文档非常清楚:
将上游项映射到SingleSources中,并一个接一个地订阅它们,如果这个可观察的或当前的内部SingleSource失败,则发出它们的成功值或立即终止。
Q2:可以将concatMap文档改写为:
将上游项目映射到ObservableSources并一个接一个地订阅它们?
concatMap文档的原始版本
返回一个新的可观察到的项,该项是通过应用向源ObservableSource发出的每个项提供的函数而产生的,该函数返回一个ObservableSource,然后发出通过连接这些结果ObservableSources而产生的项。
也就是说,下面的行基本上是相同的(就MAX_CONCURRENCY而言)?
int MAX_CONCURRENCY = 1;
Observable.just(1, 2, 3).flatMap(num -> Observable.just(num), false, MAX_CONCURRENCY);
Observable.just(1, 2, 3).concatMap(num -> Observable.just(num));发布于 2018-04-28 11:19:58
Q1:它是否意味着从可观察到的映射中预取元素,然后按顺序订阅一个元素?
在当前的concatMap实现中,上游项是预取的,但直到前一个内部源完成(或者是第一个项)才被映射。内部资源是一个接一个运行的。
Q2: concatMap文档可以重定义为:
我还会在第一句中提到错误行为,就像使用concatMapSingle一样。欢迎你。
一些较旧的javadocs的措辞有点复杂,而更新的javadocs则更快。那些老的也让我很恼火,但是除非他们需要一些扩展--因为StackOverflow对他们的问题和误解增加了--我倾向于不去管他们。
下面的行基本上是相同的(就MAX_CONCURRENCY而言)?
对于Observable,没有背压,所以concatMap和flatMap都必须排队等待上游项目,直到它们准备好被映射和订阅为止。concatMap的prefetch提示应该更像capacityHint,因为它用于对包含额外值的内部队列进行大小调整。
发布于 2018-04-28 09:39:13
TL博士:这是真的。找到答案了论GitHub。
https://stackoverflow.com/questions/50074936
复制相似问题