3 回答
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 操作符订阅一个发出 Observables 的 Observable。每次它观察到其中一个发出的 Observable 时,由 Switch 返回的 Observable 取消订阅先前发出的 Observable,开始从最新的 Observable 发出项目。
正如MorleyDev指出的那样,.NET 实现是https://docs.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh229197(v=vs.103),因此相当于 Rx 中的 RxJS switchMap .NET 是 Switch 和 Select 运算符的组合:
// RxJS
observableOfObservables.pipe(
switchMap(next => transform(next))
...
)
// RX.Net
observableOfObservables
.Switch()
.Select(next => transform(next))
...
编辑
switch
是等价的。 http://reactivex.io/documentation/operators/switch.html
简而言之,switchMap
它将switch
取消任何先前的流,而flatMap
不会。