RxJs-具有可观测属性的平面图对象

RxJs - FlatMap Object with Observable Property

本文关键字:平面图 对象 属性 可观 RxJs-      更新时间:2023-11-13

我正在处理一个简单的RxJs查询,我似乎无法理解它。如果Observables被包裹在一个对象中,我似乎不知道如何合并它们。如果我只是直接从flatMap返回Observable,那么这个例子就可以正常工作,但我也需要在输出中输入名称。我怎样才能做到这一点?

我使用的是RxJS 5.0.0-beta.2

基本数据结构:

var data = [
  {
    "name": "Test #1",
    "users": [
      {
        "name": "John Doe",
        "gender": "male"
      },
      {
        "name": "John Doe",
        "gender": "male"
      },
      {
        "name": "Jane Doe",
        "gender": "female"
      }
    ]
  },
  {
    "name": "Test #2",
    "users": [
      {
        "name": "John Doe",
        "gender": "male"
      },
      {
        "name": "Jane Doe",
        "gender": "female"
      },
      {
        "name": "Jane Doe",
        "gender": "female"
      }
    ] 
  }
];

RxJs函数:

Observable.fromArray(data)
  .flatMap(x => {
    return Observable.of({
      "name": x.name, 
      "count": Observable.fromArray(x.users)
                .filter(x => x.gender == "male")
                .count()
      })
  })
  .toArray()
  .subscribe(result => {
    console.log(result);
  });

期望结果:

result = [
    {
      "name": "Test #1",
      "count": 2
    },
    {
      "name": "Test #2",
      "count": 1
    }
  ];

实际结果:

result = [
    {
      "name": "Test #1",
      "count": Observable
    },
    {
      "name": "Test #2",
      "count": Observable
    }
  ];
Observable.fromArray(data)
.flatMap(x => {
  return Observable.of({
    "name": x.name, 
    "count": x.users
              .filter(x => x.gender == "male")
              .length
  });
})
.toArray()
.subscribe(result => {
  console.log(result);
});