rxjs经典场景之http请求

在实际开发中,相信小伙伴们都碰到过接口的串行调用以及并行调用,而并行调用又有两种,一种是只需最先返回的结果即可,这种比较少见,有时候接口变迁,为了平缓过渡,方便容错才会出现;另一种则是需要所有请求的接口数据才能进行下一步,这种比较常见,如账号可用余额是否可以购买商品等。

普通的Ajax请求

在前端远古时代,碰到以上情况,串行通过嵌套调用来处理,并行通过判断是否均完成请求的方式来处理。




但是这样子处理实际上并不能说符合预期。首先,嵌套调用的方式,如果里面再涉及到其他回调的话,满满的回调地狱即视感。其次,判断请求状态的方式,每个接口的回调都要做判断,并行的接口越多,判断的条件越多,代码冗余的越厉害。

Promise异步处理

为了解决回调地狱的问题,ES6将Promise写进了语言标准并统一了用法。Promise的链式调用、race、all方法可以大大改善嵌套调用以及并行调用的问题,并得以解决。




但是Promise本身是无法取消的,在用于http请求时,会引发两个无法忽视的问题:

●在单页面应用中,resolve回调里需要进行try/catch处理,特别是在回调里有DOM操作的时候。否则,在接口响应慢的时候进行路由切换会导致控制台报错,甚至导致页面陷入无法交互的境地。

●由于接口响应慢而导致的竞态条件问题。

而相比之下,rxjs能解决以上所有问题。

rxjs数据流

rxjs可以说是一套针对数据流的函数响应式编程,有着极其强大而丰富的操作符,可以将所有数据抽象成数据流的形式,使开发者能以同步编程的方式来进行处理。

首先,在串、并行调用接口时,先利用操作符将数据来源进行处理,然后订阅即可。




其次,rxjs是可以取消的,对于Promise出现的两个问题:

●在切换路由,组件销毁时调用unsubscribe方法取消订阅,回调里的逻辑便不会执行。

●竞态条件是由于接口异步调用的回调顺序不可控导致的,rxjs的switchMap操作符可以确保每次接收到的都是最新一次发送的值(即最新的接口回调的值)。
睿江云计算官网:http://www.eflycloud.com/home?from=RJ_0027

原文地址:https://blog.51cto.com/13475644/2377216

时间: 2024-10-17 19:42:12

rxjs经典场景之http请求的相关文章

第三章 经典场景设计

图片缓存: ImageLoader的知识点讲的比较老,暂不总结(题外话:推荐Glide或者Fresco,但是一定要进行二次封装,否则谁知道哪天心血来潮,想着换个框架试试呢) 图片加载利器Fresco: 配置文件配置: <uses-permissionandroid:name="android.permission.INTERNET"/> 在application中进行初始化: Fresco.initialize(context); 将程序中显示图片的ImageView替换为

JMeter高并发场景下存在请求无数据

刚好失败33个请求

经典场景的设计方案整理

1.限流系统 2.秒杀系统 3.简单的权限系统 4.其他.. 参考: https://www.cnblogs.com/xiangkejin/p/9351463.html 原文地址:https://www.cnblogs.com/huilei/p/9393003.html

Grep命令详解-9个经典使用场景

Grep 全称Global Regular Expression Print,表示全局正则表达式 是一个强大的文本搜索工具,采用正则匹配 1.命令格式 grep [options] files 2.主要参数 -c: 只输出匹配行的数目 -i: 不区分大小写 -n:显示匹配航以及行号 -l:查询多文件的时候只输出包含匹配字符的文件名 -v:反向匹配,即显示不匹配的行 -h: 查询的时候不适用文件名 -s:不显示错误信息 3.部分正则表达式 \     反义字符:如"\"\"&q

转:etcd:从应用场景到实现原理的全方位解读

原文来自于:http://www.infoq.com/cn/articles/etcd-interpretation-application-scenario-implement-principle 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注.在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用.安全.

使用Python操作Redis应用场景

1. 安装pyredis 首先安装pip 1 2 3 4 5 6 7 8 <SHELL># apt-get install python-pip ...... <SHELL># pip install --proxy=http://172.1.2.6:8080 redis Downloading redis-2.9.1.tar.gz (62kB): 62kB downloaded Running setup.py (path:/tmp/pip_build_root/redis/se

jmeter通过BeanShell 脚本,实现对http请求参数的加密

jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的自动化接口测试框架.它的好还在于它是纯JAVA开发的,因此,它可以更好的跟JAVA对接,通过引入自己封装的jar文件,可以方便的实现对jmeter各种个性化需求的功能的拓展,下面以一个实际例子来说明jmeter怎么引入自己开发的java工具类来实现对http请求参数的加密处理. 在此之前,我们假设有

Android(java)学习笔记210:采用post请求提交数据到服务器

1.POST请求:  数据是以流的方式写给服务器 优点:(1)比较安全 (2)长度不限制 缺点:编写代码比较麻烦   2.我们首先在电脑模拟下POST请求访问服务器的场景: 我们修改之前编写的login.jsp代码,如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ page language="java"

高并发高性能场景(抢购、秒杀、抢票、限时竞答)解决方案

技术指标: PV(Page View, 页面浏览量)在千万级别QPS(Query Per Second, 每秒处理请求数)在百万级别数据量在千亿级别接口响应速度不能超过150毫秒用户提交请求到页面呈现不能超过3秒 架构设计:1. 从LAMP架构转为面向服务架构(服务可以用多种开发语言实现,不受一种开发语言限制)2. 对海量数据做Sharding分片,分库分表3. 从有状态服务改为无状态接口服务(便于分布式部署)4. 精心设计的数据层(存储.压缩.索引)5. 分布式系统最终瓶颈(CPU.内存.存储