当前位置: 首页 > news >正文

外贸如何推广公司网站海外网站cdn加速

外贸如何推广公司网站,海外网站cdn加速,网站建设 经营范围,wordpress 用户管理map和flatMap的区别 首先说下map和flatMap的区别&#xff0c;防止有对RxJava还不够熟悉的小伙伴 map的Function指定如何将A转为BflatMap的Function则指定如何将Observable<A>转为Observable<B>map和flatMap最终的转换结果都是Observable<B>flatMap由于可以…

map和flatMap的区别

首先说下map和flatMap的区别,防止有对RxJava还不够熟悉的小伙伴

  • map的Function指定如何将A转为B
  • flatMap的Function则指定如何将Observable<A>转为Observable<B>
  • map和flatMap最终的转换结果都是Observable<B>
  • flatMap由于可以自己创建Observable,因此更为强大灵活,map比较简单

Observable生命周期测试

下面,我们创建一个Observable,并通过map和flatMap进行多次Observable转换

分别在正常流程和异常流程下,测试map过程中各个Observable的生命周期执行流程

import io.reactivex.rxjava3.core.Observable;@SuppressWarnings("all")public class RxJavaMapTest {public static class Action {public static String A() {System.out.println("A Execute");return "A";}public static Observable<String> B() {System.out.println("B Execute");return Observable.just("B");}public static Observable<String> C() {System.out.println("C Execute");//throw new RuntimeException("Error");return Observable.just("C");}public static Observable<String> D() {System.out.println("D Execute");return Observable.just("D");}public static Observable<String> E() {System.out.println("E Execute");return Observable.just("E");}}public static void main(String[] args) {Observable.just("").map(o -> Action.A()).doOnSubscribe(aAction -> {System.out.println("doOnSubscribe A");}).doOnNext(o -> {System.out.println("doOnNext A1");}).doOnNext(o -> {System.out.println("doOnNext A2");}).doOnError(e -> {System.out.println("doOnError A");}).doOnComplete(() -> {System.out.println("doOnComplete A");}).doFinally(() -> {System.out.println("doOnFinally A");}).flatMap(o -> Action.B()).doOnSubscribe(aAction -> {System.out.println("doOnSubscribe B");}).doOnNext(o -> {System.out.println("doOnNext B");}).doOnError(e -> {System.out.println("doOnError B");}).doOnComplete(() -> {System.out.println("doOnComplete B");}).doFinally(() -> {System.out.println("doOnFinally B");}).flatMap(o -> Action.C()).doOnSubscribe(o -> {System.out.println("doOnSubscribe C");}).doOnNext(o -> {System.out.println("doOnNext C");}).doOnError(e -> {System.out.println("doOnError C");}).doOnComplete(() -> {System.out.println("doOnComplete C");}).doFinally(() -> {System.out.println("doOnFinally C");}).flatMap(o -> Action.D()).doOnSubscribe(o -> {System.out.println("doOnSubscribe D");}).doOnNext(o -> {System.out.println("doOnNext D");}).doOnError(e -> {System.out.println("doOnError D");}).doOnComplete(() -> {System.out.println("doOnComplete D");}).doFinally(() -> {System.out.println("doOnFinally D");}).flatMap(o -> Action.E()).doOnSubscribe(o -> {System.out.println("doOnSubscribe E");}).doOnNext(o -> {System.out.println("doOnNext E");}).doOnError(e -> {System.out.println("doOnError E");}).doOnComplete(() -> {System.out.println("doOnComplete E");}).doFinally(() -> {System.out.println("doOnFinally E");}).subscribe(o -> System.out.println("doOnFinally X"),e -> System.out.println("doOnError X"),() -> System.out.println("doOnFinally X"));System.out.println("Task Finish");}}

正常情况下的运行结果

doOnSubscribe A
doOnSubscribe B
doOnSubscribe C
doOnSubscribe D
doOnSubscribe E
A Execute
doOnNext A1
doOnNext A2
B Execute
doOnNext B
C Execute
doOnNext C
D Execute
doOnNext D
E Execute
doOnNext E
doOnFinally X
doOnComplete A
doOnComplete B
doOnComplete C
doOnComplete D
doOnComplete E
doOnFinally X
doOnFinally E
doOnFinally D
doOnFinally C
doOnFinally B
doOnFinally A
Task Finish

C发生异常时的运行结果

doOnSubscribe A
doOnSubscribe B
doOnSubscribe C
doOnSubscribe D
doOnSubscribe E
A Execute
doOnNext A1
doOnNext A2
B Execute
doOnNext B
C Execute
doOnFinally A
doOnFinally B
doOnError C
doOnFinally C
doOnError D
doOnFinally D
doOnError E
doOnError X
doOnFinally E
Task Finish

下面,我们基于以上两次运行结果进行分析

如果有其它更深层次的疑问,可以复制以上代码,自己调整继续运行

正常流程下的生命周期流程

  • ABCDEX依次执行onSubscribe
  • ABCDE依次执行Function和onNext
  • ABCDEX依次执行onComplete
  • XEDCBD依次执行onFinally

C发生异常时的生命周期流程

  • ABCDE依次执行onSubscribe
  • AB依次执行Function和onNext
  • C执行Function,但触发Error
  • AB不再执行onComplete,依次执行onFinally
  • C执行onError和onFinally
  • D执行onError和onFinally
  • E执行onError
  • X执行onError
  • E执行onFinally

流程分析

  • 执行subscribe方法之后,B订阅A,C订阅B。。。
  • 无异常时,onFinally是按EDCBD顺序执行的,说明Subscriber工作全部完成后,Observable才会执行onFinally
  • C触发Error后,AB都不执行onComplete,说明Subscriber处理时发生错误,Observable也会被视为工作未完成
  • C触发Error后,AB立刻执行onFinally,说明Subscriber发生异常时,Observable工作直接结束
  • C触发Error后,AB不执行onError,但DE会执行onError,说明Observable错误,会引发Subscriber错误

多次map过程中,异常处理方式可以总结为

  • 发生异常时,所有的OnSubscribe都会执行
  • 发生异常时,所有的OnFinally都会执行
  • 发生异常时,所有的OnComplete都不会执行
  • 发生异常时,后续的OnError都会执行
  • 发生异常时,后续的OnNext都不会执行
  • 发生异常时,后续的Function都不会执行

多次map过程中,Function的处理方式

  • 多次map实际上是依次订阅的关系,B订阅A,再将自己的结果发射给C
  • map方法只是创建了一个起到包装作用的Observable,将所有回调对象,和用于转换的Function保存了起来
  • Function并不会立即执行,而是等subscribe之后,等到上个Observable处理成功,才会执行

subscribe回调和doOn系列回调的区别

  • 效果一样,只是给Observable提供了不同的回调设置方式
  • subscribe回调是设置给最后一个Observable的,和前面代码没有任何关系,不要复杂化
  • 一个Observable可以有多个回调,它们都会生效,并不会相互覆盖,按设置先后顺序执行
http://www.hrbkazy.com/news/53970.html

相关文章:

  • 河北黄骅市网站建设制作一个网站的全过程
  • 腾讯建站官网阿里巴巴友情链接怎么设置
  • 不会写代码怎样做网站全网搜索软件下载
  • 怎样做展示型网站百度平台营销收费标准
  • 徐州建站软件个人网页设计作品模板
  • 广西建设网站培训心得体会万能模板
  • 小企业网站建设北京官网优化公司
  • 网站建设需要客户提供什么免费推广引流怎么做
  • 大连 网站p2p万能搜索种子
  • 整形网站开发营销方式和渠道有哪些
  • 自适应网站做mip改造北京知名seo公司精准互联
  • 企业网站建设的思路百度推广后台登陆
  • 建站公司 知乎 discuz狼雨的seo教程
  • 顺德大良哪家做网站好男生技能培训班有哪些
  • xml做web网站优秀软文营销案例
  • 做网站要服务器和什么seo搜索规则
  • 龙岩企业网站建设制作app开发流程
  • 如何给局域网 做网站sem招聘
  • 商业网站建立seo收费低
  • 海盐网站建设互联网销售可以卖什么产品
  • 青岛 php 网站建设百度的推广方式有哪些
  • 石油化工工程建设人才招聘网站微信seo什么意思
  • 手工制作灯笼视频教程seo网站优化推广
  • 做钓鱼网站百度云官网
  • 龙岩网站建设要多怎么申请建立网站
  • 专注于网络推广及网站建设百度知道客服
  • 佛山网站建设专业公司临沂网站建设
  • 做网站有什么用全网推广怎么做
  • 新闻做的差的网站优化营商环境心得体会2023
  • 做营销型网站 公司宁波seo搜索平台推广专业