【问题标题】:Equivalent of RxJS switchMap in ReactiveX/Rx.NETReactiveX/Rx.NET 中 RxJS switchMap 的等价物
【发布时间】:2017-03-31 11:22:58
【问题描述】:

RxJS 中,有一个 switchMap 函数。 ReactiveX/Rx.NET 中是否有等价物?我在transforming 文档中没有看到。

【问题讨论】:

    标签: rxjs reactivex rx.net


    【解决方案1】:

    Rx.NET 中没有一个 SwitchMany 等效于 Rx.js 中的 switchMap。您需要使用单独的 Select 和 Switch 函数。

    Observable.Interval(TimeSpan.FromMinutes(1))
        .Select(_ => Observable.Return(10))
        .Switch()
    

    文档:https://msdn.microsoft.com/en-us/library/hh229197(v=vs.103).aspx

    【讨论】:

      【解决方案2】:

      来自http://reactivex.io/documentation/operators/switch.html

      Switch 操作符订阅了一个 Observable,该 Observable 发出 可观察的。每次它观察到其中一个发出的 Observable 时, Switch 返回的 Observable 取消订阅 先前发射的 Observable 开始发射最新的项目 可观察。

      正如MorleyDev 所指出的,.NET 实现是https://docs.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh229197(v=vs.103),所以 Rx.NET 中的 RxJS switchMap 等价物是 Switch 和 Select 运算符的组合:

      // RxJS
      observableOfObservables.pipe(
          switchMap(next => transform(next))
          ...
      )
      
      // RX.Net
      observableOfObservables
          .Switch()
          .Select(next => transform(next))
          ...
      

      【讨论】:

      • 我认为您的订单不正确。 Switch 发生在内部 observables 上,但在你调用 Select 之前你还没有得到任何东西。上面的答案也反过来。
      【解决方案3】:

      编辑

      switch 是等价的。 http://reactivex.io/documentation/operators/switch.html

      简而言之,switchMapswitch 将取消任何以前的流,而 flatMap 不会。

      【讨论】:

      • flatMap 和 switchMap 绝对不是等价的
      • switchMap 确实会取消之前的流,而 flatMap 不会
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2016-08-25
      相关资源
      最近更新 更多