首页 > 解决方案 > Rxjs:等待外部可观察,将值传递给内部并在订阅中返回两个解析值

问题描述

我已经尝试了一些运算符来实现一个用例。我想执行一个 HTTP 请求,当这个外部 observable 被解析时,我想用它的值来执行另一个,然后将两个解析的值结合到一个外部 observable 和内部 observable 的 observable 中。

我不确定我可以如何以及可以使用哪些运算符或组合。

我已经尝试过以下方法。

import { forkJoin, interval, of } from "rxjs";
import { map, mergeMap, take, tap } from "rxjs/operators";


of('outer')
.pipe(
  map(
    (v) => {
      console.log(`${v}===> inner`);

      return forkJoin([
        of(`${v}===> inner`),
        of(v)
      ])
    }
  )
  ,
  tap(
    (v) => {
      console.log('tap', v);
    }
  )
 
)
.subscribe(
  (v) => {
    console.log('sub', v)
  }
)

标签: rxjs

解决方案


像这样的东西应该做的工作

of('outer').pipe(
  switchMap(outerResult => of('inner').pipe(
    tap(innerResult => console.log('outer', outerResult, 'inner', innerResult),
      map(innerResult => ({
          inner: innerResult,
          outer: outerResult
        })
      )
    )))).subscribe(
       result => {
         console.log(result);
         // the result should be an object with `inner` and `outer` keys
       }
)

  • 一旦外部解决,然后您切换到内部
  • 因为您仍在 switchMap 中,所以您可以在点击运算符中访问 outerResult

推荐阅读