Rxjs实战之combineLatest

93 篇文章 1 订阅
18 篇文章 0 订阅
需求背景:

线上环境已有请求A,现在要添加请求B,在不影响之前A的处理逻辑下,等A和B的请求都结束后,对获取到的数据进行匹配处理。请求A和B都只执行一次。

思路:

根据需求背景可知,合并两个数据,且这两个数据的先后顺序不确定,但又必须等到两个数据都获取到后再执行操作,因此比较合适的有zip和combineLatest;我觉得zip合并的两个数据在逻辑上应该是像拉链一样,需要成对出现的数据(比如数组下标对应一个数组元素这种),这里的A和B实际上是没有这种关系的,因此考虑用combineLatest。

combineLatest的作用:

合并最新的数组,弹珠图如下(图片来源:《深入浅出Rxjs》):
在这里插入图片描述
从上图可以看出,当source1$ 和source2$ 都产生一个数据时,combineLatest就开始将二者最新的数据进行合并。

项目代码弹珠图如下:

在这里插入图片描述

项目代码示例:

const requestA$ = this.service.search(params).pipe(
      map(res => {
      	// 请求A原先的一些处理逻辑
        this.handleData(res, params)
        return res // 对应下方res1
      })
    )
    // 获取所有行李额规则的请求
    const requestB$ = this.service.getData(params).pipe(
     // 项目中用了拦截器,在http请求出错时会抛出错误;
     // 为避免请求B的接口影响到接口A的进行,在这里添加错误处理逻辑,返回的data即为下面的res2
      catchError(() => {
        const data: DataBo = []
        return of(data)
      }),
    )
 combineLatest(requestA$, requestB$).subscribe(
      res => {
        const [res1, res2] = res
        // res1、res2对应请求A、B的结果,在这里进行匹配处理
      },
      err => {
        // 错误处理
      },
    )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值