Наблюдаемые вложенные обратные вызовы - PullRequest
0 голосов
/ 11 января 2020

У меня есть относительно сложная вложенная наблюдаемая, которая переключается на другие наблюдаемые и нуждается в информации, возвращаемой из каждой предыдущей наблюдаемой. Что-то вроде:

of(1).pipe(
  switchMap(res =>
    of(2).pipe(
      switchMap(res2 =>
        of(3).pipe(
          switchMap(res3 => {
              console.log(res)
              console.log(res2)
              console.log(res3)
              return of()
            }
          )
        )
      )
    )
  )
)

Есть ли способ выполнить sh без вложенных обратных вызовов коммутаторов? Основная проблема заключается в том, чтобы помнить значение, испускаемое каждой вложенной наблюдаемой.

Ответы [ 2 ]

3 голосов
/ 11 января 2020

Конечно. Все, что вам нужно сделать, это переписать предыдущие значения:

of(1).pipe(
  switchMap(res => of({ res1: res, res2: 2 })),
  switchMap(res => of({ ...res, res3: 3 })
).subscribe(...)

или

of(1).pipe(
  switchMap(res1 => of(2).pipe(map(res2 => ({ res1, res2 }))),
  switchMap(res => of(3).pipe(map(res3 => ({ ...res, res3 })))
).subscribe(...)
0 голосов
/ 11 января 2020

Я думаю, что это может сделать работу:

of(1).pipe(
  switchMap(res => forkJoin(of(res), of(2))), // Returns [1, 2]
  switchMap(res => forkJoin(...res.map(v => of(v)), of(3))), // forkJoin(of(1), of(2), of(3))
  switchMap(res => forkJoin(...res.map(v => of(v)), of(4))),
).subscribe(console.log) // 1, 2, 3, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...