Вы можете попробовать что-то вроде
getCat()
.pipe(
switchMap(cat => petCat(cat).pipe(map(mood => ({cat, mood})))),
switchMap(({cat, mood}) => getFood(cat, mood))
)
Вся идея состоит в том, чтобы использовать switchMap
к переключателю из источника Observable в Observable, возвращаемого функцией, переданной в switchMap
в качестве параметра.
Возможно, стоит упомянуть использование map
, прикованного цепью к трубе первого switchMap
. Этот оператор map
гарантирует, что мы сохраняем cat
как часть параметров, которые передаем второму и последнему, switchMap
.
ОБНОВЛЕНИЕ после комментария
Если функция perform
должна излучать все 3 элемента, испускаемые этими 3 функциями, вы можете попробовать что-то вроде следующего
function perform() {
return getCat()
.pipe(
switchMap(cat => petCat(cat).pipe(map(mood => ({cat, mood})))),
switchMap(({cat, mood}) => getFood(cat, mood).pipe(map(food => ({cat, mood, food}))))
)
}