rxjs的几点使用心得

这篇具有很好参考价值的文章主要介绍了rxjs的几点使用心得。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.对错误的处理

日常使用中,点击按钮需要往后台发消息,为了不重复发消息,经常需要把点击事件做成subject,然后把发消息的过程做成switchMap,类似下面的写法

    const subject = new rxjs.Subject();

    subject.pipe(
      rxjs.operators.switchMap(index => {
        return rxjs.of(index);
      })
    ).subscribe({
      next: console.log,
      error: err => console.error('error2', err),
      complete: () => console.log('complete')
    });

    subject.next(1);
    subject.next(2);
    subject.next(3);
    subject.next(4);
    subject.complete();

但是如果某一个发消息的observer报了一个500错误,那么会导致后面的点击事件不会继续调用发消息的过程。

    const subject = new rxjs.Subject();

    subject.pipe(
      rxjs.operators.switchMap(index => {
        if (index === 2) {
          return rxjs.throwError(new Error('error'));
        }
        return rxjs.of(index);
      })
    ).subscribe({
      next: console.log,
      error: err => console.error('error2', err),
      complete: () => console.log('complete')
    });

    subject.next(1);
    subject.next(2);
    subject.next(3);
    subject.next(4);
    subject.complete();

如上,当index等于2时,rxjs抛出错误,后面的3,4都不会执行了。

为了使后台的错误不影响rxjs,我们需要对switchMap里面的observer做catchError的特殊处理。如下:

    const subject = new rxjs.Subject();

    subject.pipe(
      rxjs.operators.switchMap(index => {
        if (index === 2) {
          return rxjs.throwError(new Error('error')).pipe(
            rxjs.operators.catchError(err => {
              return rxjs.empty();
            })
          );
        }
        return rxjs.of(index);
      })
    ).subscribe({
      next: console.log,
      error: err => console.error('error2', err),
      complete: () => console.log('complete')
    });

    subject.next(1);
    subject.next(2);
    subject.next(3);
    subject.next(4);
    subject.complete();

这样做会跳过抛出错误的后台请求,保证rxjs继续往下执行。

2.如何保证loading = false必执行

如果rxjs抛出错误,subscribe的error分支会执行,complete分支不会执行

如果rxjs不抛出错误结束,subscribe的error分支不会执行,complete分支会执行

有个操作符,不管抛不抛出错误,他都会执行。

    var loading = true;
    rxjs.from([1,2,3]).pipe(
      rxjs.operators.map(i => {
        if (i === 2) {
          throw new Error('error');
        }
        return i;
      }),
      rxjs.operators.finalize(() => {
        console.log('set loading')
        loading = false;
      })
    ).subscribe({
      next: console.log,
      error: console.error,
      complete: () => console.log('complete')
    });

3.如何依次发送后台请求

碰到需要同时发送后台请求时,一般使用forkjoin方法。

如果请求A依赖于请求B的结果,需要A返回后再发送请求B。这时可以用concat配合bufferCount操作符来实现

    var a = rxjs.Observable.create((observer) => {
      setTimeout(() => observer.next('a1'), 2000);

      // setTimeout(() => observer.error(new Error('error')), 3000);
      setTimeout(() => observer.complete(), 4000);
    });

    var b = rxjs.Observable.create((observer) => {
      setTimeout(() => observer.next('b1'), 2000);
      // setTimeout(() => observer.next('b2'), 3000);
      // setTimeout(() => observer.next('b3'), 3300);
      setTimeout(() => observer.complete(), 4000);
    });

    rxjs.concat(a, b).pipe(
      rxjs.operators.bufferCount(2),
    ).subscribe({
      next: console.log,
      error: err => console.error('error123', err),
      complete: () => console.log('complete')
    });

 文章来源地址https://www.toymoban.com/news/detail-409651.html

到了这里,关于rxjs的几点使用心得的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eclipse整合tomcat时要注意的几点

      1、安装目录及jdk 2、参数配置   注意:Arguments 的配置,日志输出文件目录及java 内存大小设置等,如下: -Dcatalina.base=\\\"E:apache-tomcat-7.0.52\\\" -Dcatalina.home=\\\"E:apache-tomcat-7.0.52\\\" -Dwtp.deploy=\\\"E:apache-tomcat-7.0.52webapps\\\" -Djava.endorsed.dirs=\\\"E:apache-tomcat-7.0.52endorsed\\\" -Djava.util.logging.config.fil

    2024年02月16日
    浏览(34)
  • AIGC: 关于ChatGPT这个智能工具带来的几点思考

    ChatGPT的出现 2022年11月底,ChatGPT 上线,引爆 AI 圈 和 科技圈,2023年春节后, 人人都开始关注并讨论这项新技术 它是 OpenAI 研发的智能聊天工具, 基于GPT语言模型,模拟人类的对话方式 默认只能用文字进行交互,理解多种语言,有一些插件,可用语音,图表等 截止现在,Chat

    2024年02月04日
    浏览(34)
  • Go错误处理的几种方式

    Go 的 error 有两个很重要的特性: error 就是一个普通的值,处理起来没有额外的开销 error 的扩展性很不错,可以按照不同的场景来自定义错误 在 Go1.13 之后,在 errors 包中提供了一些函数,让错误的处理和追踪更加方便一些。 这篇文章会结合 errors 中的函数,来讨论一下 Go 中

    2024年02月12日
    浏览(28)
  • Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明

    mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。 没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件。 启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。 部件方法hasMouseTracking()用于返回当前是否启用鼠标跟踪

    2024年02月07日
    浏览(31)
  • Angular中RxJS处理一些任务——HTTP请求,表单处理

            此篇是完善https://blog.csdn.net/qq_44327851/article/details/134917018这篇博客,在上篇博客中我们提到了处理异步数据流,那在Angular中有哪些异步数据流呢,又是如何处理的呢?         Angular中的RxJS是一个非常强大和流行的库, 用于处理异步数据流和事件流 。它提供了丰

    2024年02月03日
    浏览(33)
  • Unity案例-实现心电图效果(1),写给1-3年Android程序员的几点建议

    👉 前提 小空是开发医疗产品软件的,所以心电图是必须要绘制的效果。刚开始的时候小空是准备使用一个闪烁粒子预制体,然后利用代码进行不断的创建,但是想想总感觉哪里不对。一直没有真实的动手进行下去。 直到某一天突然的灵光乍现:完全可以利用一个粒子的拖尾

    2024年04月25日
    浏览(30)
  • kafka使用时常见的几个错误汇总

    WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 解决 :重启kafka org.apache.kafka.common.KafkaException: Socket server failed to bind to 114.115.20.100:9092: Cannot 解决 :在kafka安装目录的conf下,编辑se

    2023年04月08日
    浏览(25)
  • 零一万物黄文灏:没有做出Sora的几点反思;大模型一千零一问;Mistral不愧欧洲之光;微软生成式AI入门课(第2版) | ShowMeAI日报

    🧩 法国大模型初创公司 Mistral AI 发布 Large 和 Small 两款大模型** mistral.ai/news/mistra… 体验网址 chat.mistral.ai/chat 继推出 Mixtral 8x7B、Mistral Medium 后,Mistral AI 这次发布了性能比肩 GPT-4 的旗舰大模型 Mistral Large ,以及针对低延迟和成本优化的新模型 Mistral Small 。 根据 Mistral AI 官网

    2024年03月27日
    浏览(29)
  • 【java】日常开发中提升技术的几个建议

    日常开发中,都是在做业务需求,如何提升自己的技术呢? 所以,本文作者整理了提升技术的13个建议,小伙伴们,一起加油。 比如,对于Java程序员来说,要了解Java语言的基本概念和核心特性,包括面向对象编程、集合框架、异常处理、多线程等等。可以通过阅读Java的官方

    2024年02月05日
    浏览(39)
  • reify:rxjs: timing reifyNode:node_modules/@vue/cli/node_modules——————npm run dev报错-npm初始化错误

    金钱不够,全靠技术 原因是网络问题 2种解决方法 重新输入,多试几次就好了 可以尝试换个镜像 如果是淘宝镜像,建议前者,其他镜像的可以试试换换 如果还不行试试,官方镜像 当时的效果图以后再补上 效 果 图 下回补上效果图 尝试换个新文件夹试试,作者换个文件夹就

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包