rxjs 6 observable<any> 到 observable<any[]>

问题描述

我使用 angular/fire valueChanges() 获取文档

const countries: Observable<any> = this.AngularFireStorage
      .doc('country/country')
      .valueChanges()

如果添加管道(tap(x => console.log(x))。它会记录

{ jp: {id: jp},us: {id: us}}

我想要的是添加 pipe(tap(x => console.log(x)) 并获取

{id: jp}
{id: us}

如何将国家:Observable 转换为国家:Observable

解决方法

代替pipe(tap(x => console.log(x))

写:

pipe(tap(x =>
    const result = [];
    Object.keys(x).forEach(key => result.push(x[key]));
    console.log(result);
))
,

您可以使用 Object.values 将对象的值转换为数组。您可以使用三种常见的高阶运算符(switchMapmergeMapconcatMap)中的任何一种将该数组转换为值流。

可能的样子:

const countries: Observable<any> = this.AngularFireStorage
  .doc('country/country').valueChanges().pipe(
    concatMap(Object.values),tap(console.log)
  )