В RxJS есть функция switchMap. Есть ли аналог в ReactiveX/Rx.NET? Я не вижу его в документации по преобразованию.
Эквивалент RxJS switchMap в ReactiveX/Rx.NET
Ответы (3)
Изменить
switch
является эквивалентом. http://reactivex.io/documentation/operators/switch.html
Короче говоря, switchMap
и switch
отменят все предыдущие потоки, а flatMap
— нет.
В Rx.NET нет единого SwitchMany, эквивалентного switchMap в Rx.js. Вам нужно использовать отдельные функции 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, который испускает Observables. Каждый раз, когда он наблюдает за одним из этих испускаемых Observable, Observable, возвращаемый Switch, отписывается от ранее выпущенного Observable, начинает испускать элементы из последнего Observable.
Как указал MorleyDev, реализация .NET https://docs.microsoft.com/en-us/previous-versions/dotnet/reactive-extensions/hh229197(v=vs.103), поэтому эквивалентом switchMap RxJS в Rx.NET является комбинация операторов Switch и Select:
// RxJS
observableOfObservables.pipe(
switchMap(next => transform(next))
...
)
// RX.Net
observableOfObservables
.Switch()
.Select(next => transform(next))
...
Switch
происходит с внутренними наблюдаемыми, но у вас их нет, пока вы не вызовете Select
. Приведенный выше ответ также имеет их наоборот.
- person PhilT; 22.12.2019