Получать события наблюдаемой с момента времени в Rx - PullRequest
1 голос
/ 16 апреля 2020

Я хочу подписаться на Observable, но мне нет дела до событий, генерируемых до моей подписки.

Существует хакерский способ, с помощью оператора skipUntil:

let a: Observable<Int>
// ...
a.skipUntil(Observable.of(0)) // ...

Он использует новый Observable.of(0), чтобы начать замечать события с этого момента. Но это отчасти хаки, и я хочу лучшего способа. В идеале:

a.skipUntilNow() // ...

1 Ответ

1 голос
/ 16 апреля 2020

Нет такой вещи, как «события до того, как я подписался», потому что Observable не начинает генерировать события, пока он не был подписан.

Например, посмотрите на функцию create.

let obs = Observable.create { observer in 
    // do stuff to observer
    return Disposables.create()
}

Это замыкание, передаваемое в функцию создания, вызывается каждый раз, когда , на которое подписывается наблюдаемое. Другими словами, каждая подписка получает свою собственную серию событий, и каждое из них начинается с выполнения sh закрытия. Не было «событий до подписки».

Все вышеперечисленное относится к «холодной» наблюдаемой по умолчанию. Существует также понятие «горячих» наблюдаемых (например, субъектов), которые делятся своими событиями со всеми подписчиками, но они не хранят старые события, если вы явно не используете одно, предназначенное для этого.

Итак решение вашей проблемы не в том, чтобы искать взлом, а вместо этого использовать подходящий инструмент для работы.


ОБНОВЛЕНИЕ

Что касается вашего комментария об использовании BehaviorSubject. Простое решение - просто не использовать его, если вам не нужен его функционал. Вместо этого используйте PublishSubject. Другое решение - использовать .skip(1), чтобы избежать получения текущего значения.

...