Как обновить наблюдаемую вручную?

Я новичок в reactivex и rxscala и могу создать Observable вот так:

val observable = Observable[String] { subscriber => 
    subscriber.onNext("something")
}

Я могу поместить новые строки в subscriber внутри Observable.apply.

Можно ли обновить observable снаружи? Я имею в виду, есть ли такой метод, как putNext:

observable.putNext("another string")

чтобы заставить меня добавлять новые вещи к существующим наблюдаемым?


person Freewind    schedule 11.11.2015    source источник


Ответы (1)


Если вы хотите вручную управлять Observable, вам нужно использовать Subject.

Согласно документации ReactiveX:

Субъект — это своего рода мост или прокси, доступный в некоторых реализациях ReactiveX, который действует как наблюдатель и как наблюдаемый объект. Поскольку он является наблюдателем, он может подписаться на один или несколько Observable, а поскольку он является Observable, он может проходить через наблюдаемые им элементы, переиздавая их, а также может создавать новые элементы.

Вы можете подписаться на Subject, но вы также можете передавать ему новые элементы, де-факто управляя им вручную, что вы и просите.

Пример:

val subject = PublishSubject[String]()
subject.onNext("one")
subject.onNext("two")
subject.onNext("three")
subject.onCompleted()
person Gabriele Petronella    schedule 11.11.2015