在ReactiveX / Rx.NET中等效RxJS switchMap

时间:2017-03-31 11:22:58

标签: rxjs reactivex rx.net

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

3 个答案:

答案 0 :(得分:5)

Rx.NET中没有单个SwitchMany相当于Rx.js中的switchMap。您需要使用单独的选择和切换功能。

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

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

答案 1 :(得分:1)

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

  

Switch运算符订阅发出的Observable   可观察的。每当它观察到这些发射的可观察物之一时,   交换机返回的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))
    ...

答案 2 :(得分:-3)

修改

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

简而言之,switchMapswitch会取消之前的所有流,而flatMap则不会。