У меня есть объектный поток Observable, и я пытаюсь вернуть поток Observable <string>от члена массива - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно отфильтровать список объектов и создать отдельный наблюдаемый поток из элемента 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 Ответ

2 голосов
/ 12 апреля 2019

map оператор требует, чтобы внутренняя функция возвращала значение. Вы возвращаете undefined, потому что у вас нет return заявления там.

В любом случае, вы можете использовать mergeMap, чтобы развернуть массив категорий в отдельные выбросы, тогда distinct() выполнит свою работу:

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