используйте RX JS, чтобы вернуть результаты двух наблюдаемых вместе - PullRequest
0 голосов
/ 26 марта 2020

Я хотел бы прочитать параметры из URL-адреса и с этим значением затем вызвать наблюдаемое. Если результат был найден, я хотел бы продолжить с ним и назвать другой наблюдаемый. В идеале оба вызова обернуты, и мне нужно подписаться только один раз, и я получаю оба результата вместе.

Пока это моя реализация:

this.route.paramMap.pipe(
  switchMap(params => {
    return forkJoin(
      this.treeService.getTree(params.get('treeName')),
      this.treeService.getTree(params.get('treeName')).pipe(
        mergeMap(tree => this.fruitService.getFruit(tree.id))
      )
    )
  })
).subscribe(res => console.log(res));

это работает просто отлично, но у меня есть сделать 2 одинаковых вызова .. как я могу улучшить его, чтобы он выполнял только один вызов treeService?

1 Ответ

3 голосов
/ 26 марта 2020

Вы можете использовать внутренний map, например:

this.route.paramMap.pipe(
  switchMap(params => {
    return this.treeService.getTree(params.get('treeName')).pipe(
      switchMap(tree => this.fruitService.getFruit(tree.id).pipe(
        map(fruit => ([tree, fruit]))
      ))
    )
  })
).subscribe(res => console.log(res));
...