【问题标题】:recursive rxjs switchmap ish递归 rxjs switchmap ish
【发布时间】:2021-09-14 16:11:18
【问题描述】:

我想要一个变量 states$:一个可观察的对象流,每个对象都包含一个可观察类型的成员 nextState$。这个属性 nextState$ 发送一个对应于下一个状态的唯一项,以此类推...

示例:

const states$ = of({ nextState$: createObservableWithNextState$() }).pipe(
switchMap(state => state.nextState$),
switchMap(state => state.nextState$),
switchMap(state => state.nextState$),
switchMap(state => state.nextState$),
...
)

当然不行,至少有两个原因:

  • 我不希望在我的代码中...无限重复 switchMap
  • 我想订阅 state$ 并接收每个对象(包括 of() 中的初始对象)

当然,我可以从头开始创建自己的 observable,但在我想知道现有的 rxjsoperators 是否可以实现之前。有什么想法吗?...

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    RxJS#expand

    Expand 应该可以很简单地完成您所追求的工作。
    我假设在某些时候你会到达一个没有 nextState$ 的状态,但你可以轻松地改变这个条件。

    const states$ = of({ 
      nextState$: createObservableWithNextState$() 
    }).pipe(
      expand(state => state.nextState$ != null? state.nextState$ : EMPTY)
    );
    

    展开比switchMap 更接近mergeMap。您可以将并发设置为 1 以使其像 concatMap 一样工作。如果你真的追求类似 switchMap 的行为,这会变得有点复杂。

    【讨论】:

    • 谢谢,我不认识这个运营商。这确实正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多