前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🏆RxJs合并接口应用案例

🏆RxJs合并接口应用案例

作者头像
前端小鑫同学
发布2022-12-26 09:26:04
6310
发布2022-12-26 09:26:04
举报

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~

实验目标:

将来自不同接口的数据合并到一个字段中使用。

环境及依赖:

vite^2.6.4

rxjs6.6.6

axios^0.24.0

vue3+tsAngular默认支持RxJsVue默认不配置RxJs相关内容,所以更能体现创建类的操作符);

数据来源:JSONPlaceholder

创建操作符:

from:核心操作,没有Observable对象就无从谈起响应式编程,from操作符将接口返回的Promise对象(像Observable对象)转为Observable对象。

合并操作符:

zip

  1. 特点:拉链式组合(一对一组合);
  2. 目的:将两个接口的结果按合并顺序存在数组中。过滤操作符:

filter:查看数据是否都正常返回,期间使用数组的every函数保证每个接口状态均为200。

转换操作符:

map:将接口返回的巨型数据只保留业务相关的data内容返回。

实现过程:

导入相关依赖:

代码语言:javascript
复制
import axios from 'axios'
import { from, zip } from 'rxjs';
import { filter, map } from 'rxjs/operators';

将接口返回的promise对象转换为observable对象:

代码语言:javascript
复制
const observable1 = from(axios.get('https://jsonplaceholder.typicode.com/todos/1'));
const observable2 = from(axios.get('https://jsonplaceholder.typicode.com/posts/1/comments'));

定义接收对象:

代码语言:javascript
复制
let response = null;

通过Rxjs的相关操作符进行数据处理:

代码语言:javascript
复制
// 合并两个observable对象
zip(observable1, observable2)
// 预处理
.pipe(
 // 过滤数据:要求所有的接口状态必须为200
 filter(res => res.every(res => res.status === 200)),
 // 仅返回业务数据以供使用
 map(res => res.map(res => res.data)),
).subscribe(res => {
 // 将两次请求的数据合并到response对象中
 response = {
     ...res[0],
     comments: res[1],
 }
 console.log(response);
})

合并结果展示:

代码语言:javascript
复制
{
 "userId": 1,
 "id": 1,
 "title": "",
 "completed": false,
 "comments": [
     {
         "postId": 1,
         "id": 1,
         "name": "",
         "email": "",
         "body": ""
     }
 ]
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验目标:
  • 环境及依赖:
  • 创建操作符:
  • 合并操作符:
  • 转换操作符:
  • 实现过程:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档