如何合并 flatMap 发射?

How to merge the flatMap emits?

在 switchMap 运算符之后,我使用 flatMap 运算符来获取对象可观察数据

return this.db.list(`UserPlaces/${this.authData.auth.auth.currentUser.uid}`, {
    query: {
      orderByChild: 'deleted',
      equalTo: false
    }
  })
  .map((locations: any) => {
    console.log(JSON.stringify(locations,null,2)); // this log is called 0
    return locations.map(location => {
      return location.$key;
    });
  }).switchMap(ids => {
    return ids.map(id => {
      console.log(id) // this log is called 1
      return this.db.object(`Devices/${id}`)
    });
  }).flatMap((x: any) => {
    console.log(x); // this log is called 2
    return x;
  }).map((x:any)=>{
    console.log(x); 
     if(!x.deleted){
      return x;
    }
  })
  .do(console.log) // and this log is called 3

日志 0:

[
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  },
  {
    "deleted": false,
    "guest": false,
    "owner": true
  }
] 

日志 1:

-L8CmrV8BBQCVv_0x_-6
-L8CnDqHz_VWP9dpw-tz
-L8CxQ_bz4EQSPa4STUd
-L8CxSaF1JdHwhn3YyrC
-L8WVlwWj-ghpZsx2PEE
-L8WW5QbxxNMeWonNdSg
-L8XJHI0-ZhPAA9Xy3Sx

日志 2:

FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}
FirebaseObjectObservable {_isScalar: false, $ref: U, source: FirebaseObjectObservable, operator: ObserveOnOperator}

日志 3:

{deleted: false, id: "", name: "new place", owner: "cS81XkHhVHNv0nmpVit0Glpuc1t1", tone: "default", …}
{deleted: false, id: "", name: "new one", owner: "cS81XkHhVHNv0nmpVit0Glpuc1t1", tone: "default", …}
{deleted: false, id: "", name: "nice", owner: "cS81XkHhVHNv0nmpVit0Glpuc1t1", tone: "default", …}
{deleted: false, id: "", name: "new one", owner: "cS81XkHhVHNv0nmpVit0Glpuc1t1", rooms: {…}, …}
{deleted: false, id: "", name: "das", owner: "cS81XkHhVHNv0nmpVit0Glpuc1t1", tone: "default", …}

我需要的是将日志 3 合并为一个对象数组,而不是分离的对象。

我的目标是:

显示循环遍历数组并显示地名的离子-select。

谢谢。

如果源完成:

return this.db.list(`UserPlaces/${this.authData.auth.auth.currentUser.uid}`, { ... })
  ...
  .toArray()
  .do(console.log) // and this log is called 3

或者如果它不使用 scan() 收集结果:

return this.db.list(`UserPlaces/${this.authData.auth.auth.currentUser.uid}`, { ... })
  ...
  .scan((acc, item) => [...acc, item], [])
  .do(console.log) // and this log is called 3

顺便说一句,看起来你是故意解包数组的:

...
.flatMap((x: any) => {
  console.log(x); // this log is called 2
  return x;
}
...