我有一个Observable对象流,并尝试从数组成员返回Observable <string>流

时间:2019-04-12 12:24:33

标签: typescript rxjs rxjs6

我需要过滤对象列表,并从string []成员创建一个独特的可观察流。打字稿2.9.2

interface Product2 {
  id: number;
  categories: string[];
}

const products: Product2[] = [
   {id: 1, categories: ['abc', 'def']},
   {id: 2, categories: ['def', 'xyz']}
];
const products$: Observable<Product2> = from(products);

const allCategories$: Observable<string|void> = products$
  .pipe(
      map((val: Product2) => { from(val.categories).subscribe(); } ),
      distinct()
  );

console.log('logging categories');
allCategories$.subscribe(val => console.log(val));

预期的'abc','def','xyz'未定义。

1 个答案:

答案 0 :(得分:2)

map运算符要求内部函数返回一个值。您返回undefined是因为那里没有return语句。

无论如何,您可以使用mergeMap将类别数组展开为单独的排放物,然后distinct()将完成其工作:

const allCategories$: Observable<string|void> = products$
  .pipe(
    mergeMap((val: Product2) => val.categories),
    distinct()
  );