javascript - Angular RxJs - 在第二个流中填充数组(嵌套流)

标签 javascript angular typescript rxjs rxjs6

我的 Angular 应用程序中有一个特定模型的列表。此列表的每个项目都有一个属性 xyzList .这xyzList属性应该从依赖于第一个请求的 id 的请求中填充。这里有一个例子:

型号:

{
  id: number;
  name: string;
  xyzList: any[]
}

现在我有两个请求:

请求 1:填充模型,但不填充 xyzList

this.myVar$ = this.myService.getElements<Model[]>();

请求2:应该填写xyzList

this.myService.getXyzElements<XyzModel[]>(idOfTheModelOfTheFirstRequest);

起初我是这么想的:

this.myService.getElements<Model[]>()
.pipe(
  mergeMap(items => items)
  mergeMap(item => {
    return this.myService.getXyzElements<XyzModel[]>(item.id)
           .pipe(
             map(xyzList => {
               item.xyzList = xyzList

               return item;
             })
           )
  })
)

这不起作用,因为我已经展平了我的列表,我需要一个 Observable<Array[]> ,但我认为或多或少清楚我想要实现的目标。我想我可以用 forkJoin 来实现例如,但我不知道怎么做。或者有没有办法将扁平化列表转换回列表?

最佳答案

需要使用toArray(),因为mergeMap/flatMap是用来扁平化数据流数组的。它将返回一个数组而不是数据流。

this.myService.getElements<Model[]>()
.pipe(
  mergeMap(items => items)
  mergeMap(item => {
    return this.myService.getXyzElements<XyzModel[]>(item.id)
           .pipe(
             map(xyzList => {
               item.xyzList = xyzList

               return item;
             })
           )
  }),
  toArray()
)

关于javascript - Angular RxJs - 在第二个流中填充数组(嵌套流),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129929/

相关文章:

javascript - 带有 Angular 指令的 HTML 在附加时不起作用

javascript - 为什么我的 Javascript 动画会在一段时间后变慢

javascript - 从 Node JS 服务器 net::ERR_CONNECTION_RESET 上传视频时出错

Angular Directive(指令)和插值不适用于动态 html 代码

typescript - 在 Typescript 中推断两个参数的基本类型

typescript - 如何通过在 Typescript 中使用模式操作属性来基于现有类型生成新类型

javascript - 从数据 URI 创建工作线程

javascript - JQuery 工具提示不允许单击按钮

javascript - 如何在 PEERJS 和 Angular 4 上列出要连接到视频聊天的对等点?

angular - 我们如何使用 Angular 处理 URL 中的特殊字符