перебрать массив и отобразить результат на наблюдаемый с помощью rxjs - PullRequest
0 голосов
/ 19 марта 2020

Я хотел бы создать список объектов дерева, который выглядит следующим образом: {name: string, fruits: Fruit[]}[] Я получаю дерево из бэкэнда с пустым массивом фруктов, и это нельзя изменить. Поэтому мне нужно собирать фрукты отдельно. Я хотел бы создать метод, который возвращает полный объект дерева (заполненный массив фруктов) в качестве наблюдаемого и принимает массив деревьев в качестве параметров. Это то, что я пробовал:

getTreesWithFruits(trees: Tree[]): Observable<Tree[]> {
    trees.forEach(tree => {
        this.getFruits(tree).subscribe(fruits => {
            tree.fruits = fruits;
        });
    }),
}

очевидно, что это не работает, потому что мне нужно вернуть полное дерево [] как наблюдаемое. Как я могу решить эту проблему с RX JS?

1 Ответ

1 голос
/ 19 марта 2020
from(trees).pipe(
  mergeMap(tree => 
    this.getFruits(tree).pipe(
      map(fruits => {
        tree.fruits = fruits;
        return tree;
      })
    )
  ),
  toArray()
)

Если вы не хотите звонить параллельно this.getFruits, замените mergeMap на concatMap.

...