You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Returns a Completable which completes only when all sources complete, one after another.
看上去匹配度很高
可以并发任意个Completable,很方便。
唯一缺陷是必须是指定已知的参数。对于动态的参数没有办法,类似配置注入式参数就无解
floatMap和andThen的同与不同
我们知道floatMap是串联Rx对象的“神兵利器”。但是Completable并没有floatMap,因为Completable没有“输出”,所以下游的Rx没有上游的数据。好在有个功能雷同的函数andThen。
比如我有下面两个Completable使用andThen串联
虽然currentMode.getId()是一个本地变量,但是两个Completable的执行的时候,这两个变量“应该”是不一样的。
结果日志打出来getId的值没有改变和相像中的不太一样。
好吧,我做一个最简物理模型,再次验证
这样验证更简化了,我们直接查看myCompleteValue 的值的变化有没有打印出来就行了。
果然打印出来是no change。
floatMap的参数是一个拉姆达表达式andThen的参数是一个“实体”Completable ,玩过Linq和表达式编译执行都知道,拉姆达表达式是一个“未来式”,他关键是延时执行,只有在第一个Rx对象执行完成后再会执行,而实体Completable 就不是这样了,他会第一时间执行初始化操作。
再次仔细考虑下来,api是完全没有问题的,两个Completable 本身就应该是“独立”的,你本地值改变是你自己整幺蛾子
这个肯定可行,其实关键还是实际场景还是要和api“匹配”,既然有上下文最好不要用Completable。
还有如果真的没有上下文使用zip并发更加有效率
Completable的并发处理
我们知道一般的Rx并发我们使用zip函数处理
Returns a Completable which completes only when all sources complete, one after another.
看上去匹配度很高
可以并发任意个Completable,很方便。
唯一缺陷是必须是指定已知的参数。对于动态的参数没有办法,类似配置注入式参数就无解
和下面Single的zip一样是动态的
Completable是没有值的,显然要简单多了。
总结
Completable应该算是最简单的Rx对象了。所以在使用上一定要注意“合适”的原则。千万不要把复杂的场景简单化,也不要简单场景复杂化。
The text was updated successfully, but these errors were encountered: