Когда оператора WithLatestFrom недостаточно - PullRequest
1 голос
/ 31 мая 2019

Я просто наткнулся на ситуацию, когда я не могу избежать сохранения состояния, но у меня все еще есть ощущение, что этого можно достичь, используя только Rx:

У меня есть две наблюдаемые, основная из которых вызывает onNext каждый раз, когда пользователь вводит значение:

-- RV -- RV -- RV -- IV ------ ... ->

Другой вызывает onNext каждый раз, когда пользователь хочет удалить последнее значение

------------------------- X -- ... ->

Теперь дело в том, что меня беспокоит только когда пользователь удаляет релевантное значение, поэтому в этом случае я хотел следующую последовательность:

-- RV -- RV -- RV ------------ ... ->

На данный момент я могу получить то, что хочу, просто используя оператор WithLatestFrom, однако в следующем случае:

-- RV1 -- RV2 -- RV3 -- IV --------- RV4 ----- ... ->

--------------------------- X -- X ------ X -- ... ->

Я не знаю, как я могу создать наблюдаемую, которая возвращает мне следующий поток:

------------------------------- RV3 ---- RV4 -- ... ->

Надпись: RV = Соответствующее значение

IV = Не имеет значения

var scheduler = new TestScheduler();

var values =
    scheduler
        .CreateColdObservable<int>(
            new Recorded<Notification<int>>(2, Notification.CreateOnNext(0)),
            new Recorded<Notification<int>>(4, Notification.CreateOnNext(1)),
            new Recorded<Notification<int>>(6, Notification.CreateOnNext(2)),
            new Recorded<Notification<int>>(10, Notification.CreateOnNext(3)),
            new Recorded<Notification<int>>(12, Notification.CreateOnNext(4)));

var removes =
    scheduler
        .CreateColdObservable<Unit>(
            new Recorded<Notification<Unit>>(7, Notification.CreateOnNext(Unit.Default),
            new Recorded<Notification<Unit>>(8, Notification.CreateOnNext(Unit.Default)));

values
    .Select(x => x.ToString())
    .Merge(removes.Select(x => "X"))
    .Subscribe(x => Console.WriteLine(x));

scheduler.Start();
...