RxJS 应用场景1——简化轮询逻辑
从实际应用场景中抽出一段逻辑,作为说明。逻辑如下:
调用生成接口,拿到key,5秒后调用进度条接口轮询进度(数据太多),UI渲染进度,当进100时停止轮询。
所以要抽象出一个方法demoX,负责调用生成接口,并轮询进度条接口,最后返回接口响应信息(进度或,接口报错信息)。
整理一下这个方法需要实现的功能:
- 收集第一个接口和第二个接口的报错信息并返回
- 收集这个方法中出现的错误信息并返回
- 调用第一个接口拿到key 延迟5秒后轮询进度接口1秒1次
- 假如轮询时接口没有返回,而1秒又有新的轮询产生,丢掉之前的轮询
- 当轮询结果返回,方法就返回
- 方法中出现报错停止轮询,当进度为100时停止轮询
- 方法返回的是一个可观察对象,有新值时会通知订阅者
很显然,原生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",

使用RxJS封装异步轮询逻辑,实现接口调用、进度轮询及错误处理,提升代码效率。
最低0.47元/天 解锁文章
3805





