Начать подписку после запуска другой подписки - PullRequest
1 голос
/ 09 января 2020

Есть две наблюдаемые: a и b. Я хочу подписаться на второе наблюдаемое (b) после запуска первого наблюдаемого (a) (т. Е. Сгенерировало самое первое onNext событие).

Я пытался

    b.skipUntil(a).subscribe(onNext:{
        print("B: \($0)")
    }).disposed(by: _bag)

но безуспешно, потому что b - наблюдаемая холодность. Как я понимаю, он начинается немедленно и блокируется skipUntil(a).

Этот подход, кажется, работает:

    a.subscribe(onNext:{_ in
        // ... handle a ...

        b.subscribe(onNext:{
            print("B: \($0)")
        }).disposed(by: self._bag)
    }).disposed(by: _bag)

, но я понимаю, что это плохая практика, а не способ go.

1 Ответ

1 голос
/ 09 января 2020

Это просто flatMap:

let c = a.flatMap { _  in b }

Вы можете добавить .take(1) перед flatMap или просмотреть различные варианты flatMap и посмотреть, какой из них подходит для вашего варианта использования. И было бы лучше создать b наблюдаемое внутри замыкания flatMap, а не передавать его, как указано выше.

https://medium.com/@danielt1263 / rxswifts-many-face-of-flatmap-5764e6c2018 c

...