RxJS 应用场景1——简化轮询逻辑(将琐碎的异步逻辑抽象为一个输入输出流)

使用RxJS封装异步轮询逻辑,实现接口调用、进度轮询及错误处理,提升代码效率。

RxJS 应用场景1——简化轮询逻辑
从实际应用场景中抽出一段逻辑,作为说明。逻辑如下:
调用生成接口,拿到key,5秒后调用进度条接口轮询进度(数据太多),UI渲染进度,当进100时停止轮询。
所以要抽象出一个方法demoX,负责调用生成接口,并轮询进度条接口,最后返回接口响应信息(进度或,接口报错信息)。
整理一下这个方法需要实现的功能:

  1. 收集第一个接口和第二个接口的报错信息并返回
  2. 收集这个方法中出现的错误信息并返回
  3. 调用第一个接口拿到key 延迟5秒后轮询进度接口1秒1次
  4. 假如轮询时接口没有返回,而1秒又有新的轮询产生,丢掉之前的轮询
  5. 当轮询结果返回,方法就返回
  6. 方法中出现报错停止轮询,当进度为100时停止轮询
  7. 方法返回的是一个可观察对象,有新值时会通知订阅者

很显然,原生Promise 不够强大,这个方法要返回一个可观察者对象,它可以发出N个值,至到取消订阅。
demoX这个方法收集了所有报错信息及轮询结果给订阅者,由订阅者来决定后续操作,这些不是我们关心的。

step 1
封装一个_http 方法用来发起http请求:

 import { of, race } from "rxjs";
     import { delay } from "rxjs/operators";
     
     class _http {
       static post(url: string, data: any) {
         return race(
           of({ code: 408, msg: "请求超时!" }).pipe(delay(50000)),
           ajax.post(baseURL + url, data, {
             "Content-Type": "application/json;charset=UTF-8",
       
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值