首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用mergeMap订阅可观测数据数组

使用mergeMap订阅可观测数据数组
EN

Stack Overflow用户
提问于 2019-08-16 06:58:44
回答 1查看 491关注 0票数 0

我有几个可观察到的和REST端点,我订阅/调用并获取数据。

我希望从可观测点和REST端点获取所有数据,并创建一个变量将其发送到REST端点。

我正在使用forkJoinmergeMap,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const sources: Array<Observable<any>> = [
      of(this.dataStore.trips$),
      of(this.dataStore.passengers$),
      of(this.dataStore.user$),
      of(this.dataStore.user$.pipe(
        mergeMap(user => <Observable<any>> this.userService.getUserIdByEmail(user.email))
      )),
      of(this.toursStore.totalInCart$),
      of(this.toursStore.totalInCart$.pipe(
        mergeMap(total => <Observable<any>> this.currencyService.getUSDConversionRate(total)),
      ))
    ];

forkJoin(sources).subscribe(
      observables => {
        const data = observables.map(observer => this.convertObservableToBehaviorSubject(observer, observer.source.value));

        console.log(data);

        booking = {
          booking: {
            created_at: Date.now(),
            trips: data[0].value,
            passengers: data[1].value,
            total: data[4].value,
            user_id: data[3].value,
            total: data[5].value,
          },
          user: data[2].value
        };

        console.log(booking);
      },
      err => console.log('Error:', err)
    );

将可观测值转换为BehaviorSubject的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
convertObservableToBehaviorSubject<T>(observable: Observable<T>, initValue: T): BehaviorSubject<T> {
    const subject = new BehaviorSubject(initValue);

    observable.subscribe(
      (x: T) => {
        subject.next(x);
      },
      (err: any) => {
        subject.error(err);
      },
      () => {
        subject.complete();
      },
    );

    return subject;
  }

当我console.log(data)得到所有数据时,但是当我试图将值赋值给变量booking时,我得到了user_id和的未定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.dataStore.user$.pipe(
   mergeMap(user => <Observable<any>> this.userService.getUserIdByEmail(user.email))
)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.toursStore.totalInCart$.pipe(
        mergeMap(total => <Observable<any>> this.currencyService.getUSDConversionRate(total)),
      )

我希望user_idtotal有数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 07:26:43

退一步,你就可以让事情变得简单多了。

您不需要用of(...)包围可观察到的对象,因为它们在一开始就已经是可观察的了。应该使用of将对象输送到可观察的对象中。

只需与您已经拥有的可观测数据的对象(如字典)一起使用forkjoin即可。forkJoin({trips: this.datastore.trips$, passengers: this.datastore.passengers$, etc)

这意味着您将立即获得值,而不必将它们转换为BehavourSubject

所以最终的结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
forkJoin({trips: this.datastore.trips$, passengers: this.datastore.passengers$, etc...})
  .subscribe(data => {

        booking = {
          booking: {
            created_at: Date.now(),
            trips: data.trips,
            passengers: data.passengers,
            ...etc
          }
        };
  })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57526867

复制
相关文章
可串行化 数据库恢复 观测可序列化
把检查点后,崩溃前的没提交的事务的更新和CLR再过一遍,目的是使数据库恢复到崩溃时的状态。
平凡的学生族
2019/05/25
7890
构建流式应用:RxJS 详解
作者:TAT.郭林烁 joeyguo 原文地址 最近在 Alloyteam Conf 2016 分享了《使用RxJS构建流式前端应用》,会后在线上线下跟大家交流时发现对于 RxJS 的态度呈现出两大类
腾讯AlloyTeam
2017/05/02
7.4K2
RxJS mergeMap和switchMap
假设现在有一个简单的任务:页面上有一个按钮,当你点击按钮的时候,需要启动一个定时器。使用 RxJS 我们可以可以很方便地实现上述功能:
阿宝哥
2019/11/05
2.1K0
RxJS速成
RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据,包括HTTP请求,DOM事件或者普通数据等包装成流的形式,然后用强大丰富的操作符对流进行处理,使你能以同步编程的方式处理异步数据,并组合不同的操作符来轻松优雅的实现你所需要的功能
solenovex
2018/03/25
4.2K6
RxJS速成
RxJS 处理多个Http请求
有时候进入某个页面时,我们需要从多个 API 获取数据然后进行页面显示。管理多个异步数据请求会比较困难,但我们可以借助 Angular Http 服务和 RxJS 库提供的功能来实现上述的功能。处理多个请求有多种方式,使用串行或并行的方式。
阿宝哥
2019/11/05
5.8K0
用航拍和地面观测数据,DeepMind AI可完成在陌生区域导航
DeepMind的科学家们进行了相关研究,并在Arxiv.org上发表了一篇论文。
大数据文摘
2019/07/02
4110
用航拍和地面观测数据,DeepMind AI可完成在陌生区域导航
数据订阅案例
我们会通过模拟从库向主库获取对应 binlog 内容进行分析,大概架构图如下,我们会通过解析 binlog ,按照订阅通道配置的库表进行分析,所以几乎对主库没有影响。
宗文
2018/06/27
8340
5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap
RxJS 的操作符理解起来确实比较复杂,比如最常用的几种 map 操作符,本篇就来使劲冲一冲它们!!
掘金安东尼
2022/09/19
7440
5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap
RxJS速成 (下)
Subject Subject比较特殊, 它即是Observable又是Observer. 作为Observable, Subject是比较特殊的, 它可以对多个Observer进行广播, 而普通的Observable只能单播, 它有点像EventEmitters(事件发射器), 维护着多个注册的Listeners. 作为Observable, 你可以去订阅它, 提供一个Observer就会正常的收到推送的值. 从Observer的角度是无法分辨出这个Observable是单播的还是一个Subject. 从
solenovex
2018/03/29
2.2K0
RxJS速成 (下)
使用SigNoz搭建可观测系统
SigNoz是一个开源的应用程序性能监控工具,可以帮助你监控你的应用程序并排除故障,它可以进行链路追踪、基础设施监控以及日志管理,可以说是Datalog的开源版本。
iginkgo18
2023/04/03
1.3K0
使用OpenTelemetry Operator将可观测数据发送到SigNoz
OpenTelemetry Operator 是一个用于部署和管理 OpenTelemetry 组件的 Kubernetes Operator。它是一个自定义的 Kubernetes 控制器,使用 Operator 模式自动化了 OpenTelemetry 环境的部署、配置和管理过程。
我是阳明
2023/09/11
1.1K0
使用OpenTelemetry Operator将可观测数据发送到SigNoz
使用SigNoz搭建可观测系统
SigNoz是一个开源的应用程序性能监控工具,可以帮助你监控你的应用程序并排除故障,它可以进行链路追踪、基础设施监控以及日志管理,可以说是Datalog的开源版本。
没有故事的陈师傅
2023/05/01
4460
使用SigNoz搭建可观测系统
Rx.js 入门笔记
基本概念 Observable 可观察者, 生产数据 Observer 观察者, 消费数据 Subscription 订阅/可清理对象, 用以清理资源或中断Observeable执行 Subject 多播主体, 向多个订阅者广播数据 Operators 操作符, 处理数据的函数 数据获取方式, 推送/拉取 数据的获取方式,表示了数据生产者和数据消费者之间的通信关系 拉取: 由消费者控制何时获取数据, 例如:请求状态管理器中的状态指 推送: 有生产者控制何时获取数据, 例如:向服务器请求数据 可观察者 Obs
copy_left
2019/08/21
2.9K0
数据可观测性——使用SQL构建自己的数据质量监视器
在本系列文章中,我们将逐步介绍如何从头开始创建自己的数据可观察性监视器,并将其映射到数据运行状况的五个关键支柱。
云原生
2021/05/31
1K0
数据可观测性——使用SQL构建自己的数据质量监视器
【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
文章目录 一、发布-订阅模式 二、代码实现发布-订阅模式 1、订阅者接口 2、订阅者实现类 3、发布者 4、调度中心 5、客户端 一、发布-订阅模式 ---- 发布订阅模式 : 发布者 Publisher : 状态改变时 , 向 消息中心 发送事件 ; 订阅者 Subscriber : 到 消息中心 订阅自己关心的事件 ; 消息中心 : 负责维护一个 消息队列 , 根据 消息类型 将 消息 转发给 对应的 订阅者 ; 下面按照该结构实现一个简单的 发布-订阅模式 ; 二、代码实现发布-订阅模式 ---
韩曙亮
2023/03/29
1K0
【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
点击加载更多

相似问题

使用mergeMap处理嵌套的可观测数据并将params传递给子订阅

15

订阅嵌套可观测数据数组

25

mergeMap() RXJS 3观测资料

10

我不能订阅可观测到的角度13的mergeMap

28

调用多个apis并使用MergeMap订阅数据

38
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文