我怎样才能在 rxjs 订阅中访问 c​​oncatMap 对象

How can i have access to concatMap object in subscribe in rxjs

我将 from() 与管道和 concatMap 一起使用,我想访问 concatMap 中的对象,因为之后我需要它来进行映射。

         from(objects)
          .pipe(
            concatMap(object => // i need to have access to object in subscribe
              defer(() =>
                this.service.getObjectInfors(object.id)
              )
            )
          )
          .subscribe(objectInfos => {
            if (objectInfos) {
              this.objectsTab.push(
                this.mappingObject(
                  object, // i need object in this mapping
                  objectInfos
                )
              );
            }
          });

可以吗?还有其他方法可以帮助我这样做吗?谢谢

您可以将 map 通过管道传输到 concatMap 内的内部可观察对象,然后发送具有这两个值的对象。

尝试以下方法

from(objects).pipe(
  concatMap(object =>
    defer(() =>
      this.service.getObjectInfors(object.id).pipe(
        map(objectInfos => ({
          obj: object,
          infos: objectInfos
        }))
      )
    )
  )
)
.subscribe((data: any) => {
  // access `data.obj` and `data.infos` here
  if (data.infos) {
    this.objectsTab.push(
      this.mappingObject(
        data.obj,
        data.infos
      )
    );
  }
});

如果您想避免将一个数组变成一个流,您可以改为合并一个流数组。

您可以使用 array.map 中的闭包将每个对象映射到其流的结果中。

const infoObjectsCalls = objects.map(object => 
  defer(() => this.service.getObjectInfors(object.id)).pipe(
    filter(objectInfos => objectInfos != null),
    map(objectInfos => ({
      object,
      objectInfos 
    }))
  )
);

merge(...infoObjectsCalls).subscribe(mappingObject =>
  this.objectsTab.push(
    this.mappingObject(mappingObject)
  )
);