【发布时间】:2017-03-31 11:22:58
【问题描述】:
在 RxJS 中,有一个 switchMap 函数。 ReactiveX/Rx.NET 中是否有等价物?我在transforming 文档中没有看到。
【问题讨论】:
在 RxJS 中,有一个 switchMap 函数。 ReactiveX/Rx.NET 中是否有等价物?我在transforming 文档中没有看到。
【问题讨论】:
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
【讨论】:
来自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 之前你还没有得到任何东西。上面的答案也反过来。
编辑
switch 是等价的。 http://reactivex.io/documentation/operators/switch.html
简而言之,switchMap 和 switch 将取消任何以前的流,而 flatMap 不会。
【讨论】: