社区首页 >问答首页 >循环ID数组并通过可观察的方法获取数据

循环ID数组并通过可观察的方法获取数据
EN

Stack Overflow用户
提问于 2021-04-23 01:54:02
回答 2查看 904关注 0票数 0

我有一个device_ids数组。通过在UI上选择项来动态扩展数组。最初和每次更新数组时,我都需要迭代它并为每个device_id获取数据。G

获取数据基本上是一个数据库请求(对Firestore),它返回一个可观察到的数据。通过使用switchMap,我从其他数据库请求中获取一些数据。

最后,我希望有一个类似于对象/可观测的数组,其中包含我可以订阅的所有数据。我的目标是在HTML中使用角的异步管道。

这是可能的吗(例如用RxJS)?我不知道怎么解决这个..。

这就是我的代码当前的样子:

代码语言:javascript
代码运行次数:0
复制
// Init
devices$: Observable<any;

// Array of device_ids
device_ids = ['a', 'b'];

// Get device data. This will initially be called on page load.
getDeviceItemData(device_ids) {

    // Map / loop device_ids
    device_items.map(device_id => {

        // getDeviceById() returns an Observable
        return this.getDeviceById(device_id).pipe(

        // Switch to request additional information like place and test_standard data
        switchMap(device => {

            const place$ = this.getPlaceById(device['place_id]');
            const test_standard$ = this.getTestStandardById(device['test_standard_id]');

            // Request all data at the same time and combine results via pipe()
            return zip(place$, test_standard$)
                .pipe(map(([place, test_standard]) => ({ device, place, test_standard })));
        })
        ).subscribe(device_data => {
            // Do I need to subscribe here?
            // How to push device_data to my Observable devices$?
            // Is using an Observable the right thing?
        });
    });
}

// Add device
addDevice(device_id) {

    // Add device_id to array
    this.device_ids.push(device_id);

    // Fetch data for changed device_ids array
    getDeviceItemData(this.device_ids);
}

使用异步管道的首选HTML /角代码:

代码语言:javascript
代码运行次数:0
复制
<div *ngFor="device of devices$ | async">{{ device.name }}</div>

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-23 02:28:08

这在rxjs中是绝对可能的。你走在正确的道路上。我对您的getDeviceItemData()方法做了一个小的修改。

一旦id检索到设备信息,就可以使用forkJoin执行两个调用来并行地获取place和test_standard数据,然后映射该数据以返回您需要的对象,其中包含设备、place和test_standard的信息作为可观察的信息。由于我们是在device_ids上映射,所以它将生成一个包含所需对象的可观察的数组,这样您就可以轻松地使用异步管道来连接它们。

请注意:您不必订阅devices$,因为async pipe会自动为您完成此操作。

请参阅以下代码:

代码语言:javascript
代码运行次数:0
复制
  // Init
  devices$: Observable<{ device: any, place: any, test_standard: any }>[];

  // Array of device_ids
  device_ids = ['a', 'b'];

  getDeviceId: (x) => Observable<any>;
  getPlaceById: (x) => Observable<any>;
  getTestStandardById: (x) => Observable<any>;

  getDeviceItemData() {
    this.devices$ = this.device_ids.map((id) =>
      this.getDeviceId(id).pipe(
        switchMap((device) => {
          return forkJoin([
            this.getPlaceById(device['place_id']),
            this.getTestStandardById(device['test_standard_id'])
          ]).pipe(map((y) => ({ device, place: y[0], test_standard: y[1] })));
        })
      )
    );
  }

在你的中,你必须做:

编辑:由于设备$是一个可观察的数组,我们需要迭代单个可观测数据,并对每个可观察的对象应用异步管道。

代码语言:javascript
代码运行次数:0
复制
<div *ngFor="device of devices$">
  <div *ngIf="device | async as device"> 
    <div>{{ device.device.name }}</div>
    <div>{{ device.place}}</div>
    <div>{{ device.test_standard }}</div>
  </div>
</div>
票数 2
EN

Stack Overflow用户

发布于 2021-04-23 02:33:05

使用forkJoin,您可以等待所有可观察到的complete。或者,您可以使用combineLatest,这将为您提供最新的数据组合,每次一个可观察的发射数据。这将导致更多的事件,但不会等待所有事件的完成。

代码语言:javascript
代码运行次数:0
复制
getDeviceItemData(device_ids) {
  const arrayOfObservables = device_ids.map(device_id => {
    return this.getDeviceById(device_id).pipe(...);
  }
  return combineLatest(arrayOfObservables); // Observable<Data[]>
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67227790

复制
相关文章
mvc导出excel报错No converter
阿超
2023/06/23
8950
excel查找结果导出_excel数据怎么导出
由于PHPExcel早就停止更新维护,所以适用phpspreadsheet。不知道如何通过composer拉取项目包的同学,可以查看Composer学习一文。引入方法:
全栈程序员站长
2022/09/30
3.5K0
XLSTransformer 导出Excel数据[通俗易懂]
(注:excel获取数据的方式: ${results.get(“key”)} ,key为上面代码中map的key)
全栈程序员站长
2022/09/15
9380
XLSTransformer 导出Excel数据[通俗易懂]
用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下:
JQ实验室
2022/02/09
1.9K0
#Java 导出 excel 数据
实现根据excel模板导出数据(适合导出结构复杂的excel)根据模板导出excel适用于表格结构复杂的数据导出,需要提前定义好excel模板,设置好变量,然后导出数据到excel模板中。
ruochen
2021/12/15
3.3K0
Extjs将GridPanel中的数据导出到Excel的方法
前些时间老大说客户要求提供将表格中的数据导出到Excel中,因为有时候他们需要将价格资料导出以便制作报价表,于是上网找了一些资料,发现网上其实有很多例子都有浏览器兼容性的问题,于是自己整合,改进之后,终于能兼容支持和浏览器了,遂在这里与大家分享、交流:
风柏杨4711
2021/03/15
1.1K0
laravel-excel 操作:导出功能 数据用数据填充技术实现
贵哥的编程之路
2023/10/16
3350
laravel-excel 操作:导出功能 数据用数据填充技术实现
PHP将数据导出Excel表中(投机型)
  因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出。
那一叶随风
2018/08/22
1.6K0
PHP将数据导出Excel表中(投机型)
BufferedWriter导出数据excel文件
以上无非就是创建下面的一个标签(看懂的可以略过),作这一步的目的是可以只导出自己查询出来的列表:
全栈程序员站长
2022/09/01
1.9K0
php导出excel格式数据
excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。 下面就列出常用的一些格式: 1) 文本:vnd.ms-excel.numberformat:@ 2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 3) 数字:vnd.ms-excel.numberformat:#,##0.00 4) 货币:vnd.ms-excel.numberformat:¥#,##0.00 5) 百分比:vnd.ms-excel.numberformat: #0.00% 这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,我们只需要把样式添 加到对应的标签对(即闭合标签)即可。如<td></td>,给标签对<td></td>添加样式,如 下: <td  style="vnd.ms-excel.numberformat:@">410522198402161833</td> 同样,我们也可以给<div></div>添加样式,也可以给<tr>< /tr>,<table></table>添加样式;当我们在父标签对和子标签对都添加样式时,数据会以哪一个样式呈现 呢?经过测试,会以离数据最近的样式呈现.
Java架构师必看
2021/03/22
1.6K0
phpoffice/phpexcel 导出Excel表格数据
1. 下载扩展包 composer require phpoffice/phpexcel 2. 导出数据封装 在TP中使用时可以将以下类文件放入 extend 目录 <?php /** * 导出数据
很酷的站长
2023/01/16
2K0
excel 导出json_导出的数据格式不对
但是用这种方式会出现一种问题,就是当你的table有分页的情况下,只能抓取当前分页的数据。
全栈程序员站长
2022/09/20
1.3K0
excel 导出json_导出的数据格式不对
按照excel指定的样式导出数据
数据导出在涉及到报表的系统是一个很常见的功能,而excel又是常见的导出数据的方式,如果导出报表时需要按照一定的样式导出,那么就需要确保写入数据的excel按照某种样式返回。常见的方法是在创建excel的时候设置单元格样式来达到我们想要的样式效果,这种方法有以下缺点:
johnhuster的分享
2022/03/28
7680
导出excel
/** * 导出数据为excel表格 *@param $data 一个二维数组,结构如同从数据库查出来的数组 *@param $title excel的第一行标题,一个数组,如果为空则没有标题 *@param $filename 下载的文件名 */ public static function exportexcel($data=array(),$title=array(),$filename='report'){ head
苦咖啡
2018/04/28
1.8K0
用xlsx导出excel表格如何合并表格
在使用xlsx导出excel表格的时候,有时候我们需要将某些表格进行合并,该如何做呢,代码如下:
挥刀北上
2022/01/07
4.5K0
用xlsx导出excel表格如何合并表格
Excel导出
一、JS <script type="text/javascript"> $("#btnExport").click(function () { $("#searchForm").attr("action", "${ctx}/reserve/reserveCommoditySellDetail/findSellDetailListExport"); $("#searchForm").submit(); $("#searchForm").attr("ac
week
2018/08/24
4.2K0
机房收费系统——将MSHFlexGrid控件中的数据导出到Excel
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/12176225
DannyHoo
2018/09/13
9030
Java导出数据生成Excel表格
事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMa
二十三年蝉
2018/02/28
4.6K0
Java导出数据生成Excel表格
JavaWeb中导入导出Excel数据
样例代码:http://download.csdn.net/download/tmaskboy/9947368
geekfly
2022/04/24
8240
PHP导出数据为EXCEL表格
直接上代码: <?php /** * 导出数据为excel表格 *@param $data 一个二维数组,结构如同从数据库查出来的数组
Action
2021/05/12
2.7K0
PHP导出数据为EXCEL表格

相似问题

从过滤数据导出excel

10

用Pandas过滤Excel数据

11

将模型数据导出到excel mvc

10

用mvc浏览器从数据库导出excel文件

11

在MVC中将数据导出到Excel

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档