Подписка
осуществлять операции над выбросами и уведомлениями из Observable
Оператор Subscribe — это связующее звено, которое соединяет наблюдателя с Observable. Для того, чтобы наблюдатель мог видеть элементы, выброшенные Observable, или получать уведомления об ошибках или завершении из Observable, он должен сначала подписаться на это Observable с помощью этого оператора.
Типичная реализация оператора Subscribe может принимать от одного до трех методов (которые затем составляют наблюдателя), или может принимать объект (иногда называемый Observer или Subscriber), который реализует интерфейс, включающий эти три метода:
onNext- Observable вызывает этот метод всякий раз, когда Observable выбросит элемент. Этот метод принимает в качестве параметра выброшенный Observable элемент.
onError- Observable вызывает этот метод, чтобы указать, что ему не удалось сгенерировать ожидаемые данные или он столкнулся с какой-либо другой ошибкой. Это останавливает Observable, и он больше не будет выполнять вызовы к
onNextилиonCompleted. МетодonErrorпринимает в качестве параметра указание причины ошибки (иногда объект, например, Exception или Throwable, а иногда просто строку, в зависимости от реализации). onCompleted- Observable вызывает этот метод после того, как он в последний раз вызвал
onNext, если не столкнулся с какими-либо ошибками.
Observable называется «холодным» Observable, если он не начинает выброс элементов до тех пор, пока наблюдатель не подпишется на него; Observable называется «горячим» Observable, если он может начать выброс элементов в любое время, а подписчик может начать наблюдение за последовательностью выброшенных элементов в какой-то момент после его начала, пропустив любые элементы, выброшенные до момента подписки.
См. также
Информация о языке
RxGroovy BlockingObservable.forEach forEach subscribe
RxGroovy реализует несколько вариантов subscribe.
Если вы не передадите никаких параметров, это вызовет подписку на базовое Observable, но проигнорирует его испускания и уведомления. Это активирует холодное Observable.
Вы также можете передать от одного до трех функций; они будут интерпретированы следующим образом:
onNext-
onNextиonError -
onNext,onError, иonCompleted
Наконец, вы можете передать объект, реализующий один из интерфейсов Observer или Subscriber. Интерфейс Observer состоит из трех описанных ранее методов «on». Интерфейс Subscriber также реализует их, а также добавляет ряд дополнительных методов, которые облегчают реактивную обратную задержку тяги и позволяют подписчику отписаться от Observable до его завершения.
Вызов subscribe возвращает объект, реализующий интерфейс Subscription. Этот интерфейс включает метод unsubscribe, который вы можете вызвать в любое время, чтобы разорвать подписку, которую subscribe установил между Observable и наблюдателем (или методами, которые заменяют наблюдателя).
- Javadoc:
subscribe() - Javadoc:
subscribe(Action1) - Javadoc:
subscribe(Action1,Action1) - Javadoc:
subscribe(Action1,Action1,Action0) - Javadoc:
subscribe(Observer) - Javadoc:
subscribe(Subscriber)
Операторы forEach — это более простые версии subscribe. Вы можете передать от одного до трех функций, которые будут интерпретированы следующим образом:
onNext-
onNextиonError -
onNext,onError, иonCompleted
В отличие от subscribe, forEach не возвращает объект, с помощью которого можно отменить подписку. У вас также нет возможности передать параметр, обладающий этой возможностью. Поэтому следует использовать этот оператор только в том случае, если вам определенно нужно обработать все испускания и уведомления от Observable.
- Javadoc:
forEach(Action1) - Javadoc:
forEach(Action1,Action1) - Javadoc:
forEach(Action1,Action1,Action0)
Также есть метод BlockingObservable под названием forEach, который несколько похож. Для его использования необходимо сначала преобразовать исходное Observable в BlockingObservable с помощью метода BlockingObservable.from или оператора Observable.toBlocking.
BlockingObservable.forEach принимает одну функцию в качестве параметра, и эта функция ведет себя как функция onNext при подписке на обычное Observable. Оператор forEach сам блокируется, пока BlockingObservable не завершится, и он сигнализирует о завершении, разблокировавшись, а не вызывая функцию обратного вызова. В случае ошибки он сгенерирует RuntimeException (а не вызовет аналог функции обратного вызова onError).
- Javadoc: BlockingObservable.forEach(Action1)
RxJava 1․x BlockingObservable.forEach forEach subscribe
RxJava реализует несколько вариантов subscribe.
Если вы не передадите никаких параметров, это вызовет подписку на базовое Observable, но проигнорирует его испускания и уведомления. Это активирует холодное Observable.
Вы также можете передать от одного до трех функций; они будут интерпретированы следующим образом:
onNext-
onNextиonError -
onNext,onError, иonCompleted
Наконец, вы можете передать объект, реализующий один из интерфейсов Observer или Subscriber . Интерфейс Observer состоит из трех описанных ранее методов «on». Интерфейс Subscriber также реализует их, а также добавляет ряд дополнительных методов, которые облегчают рективную обратную задержку тяги и позволяют подписчику отписаться от Observable до его завершения.
Вызов subscribe возвращает объект, реализующий интерфейс Subscription. Этот интерфейс включает метод unsubscribe, который вы можете вызвать в любое время, чтобы разорвать подписку, которую subscribe установил между Observable и наблюдателем (или методами, которые заменяют наблюдателя).
- Javadoc:
subscribe() - Javadoc:
subscribe(Action1) - Javadoc:
subscribe(Action1,Action1) - Javadoc:
subscribe(Action1,Action1,Action0) - Javadoc:
subscribe(Observer) - Javadoc:
subscribe(Subscriber)
Операторы forEach — это более простые версии subscribe. Вы можете передать от одного до трех функций, которые будут интерпретированы следующим образом:
onNext-
onNextиonError -
onNext,onError, иonCompleted
В отличие от subscribe, forEach не возвращает объект, с помощью которого можно отменить подписку. У вас также нет возможности передать параметр, обладающий этой возможностью. Поэтому следует использовать этот оператор только в том случае, если вам определенно нужно обработать все испускания и уведомления от Observable.
- Javadoc:
forEach(Action1) - Javadoc:
forEach(Action1,Action1) - Javadoc:
forEach(Action1,Action1,Action0)
Также есть метод BlockingObservable под названием forEach, который несколько похож. Для его использования необходимо сначала преобразовать исходное Observable в BlockingObservable с помощью метода BlockingObservable.from или оператора Observable.toBlocking.
BlockingObservable.forEach принимает одну функцию в качестве параметра, и эта функция ведет себя как функция onNext при подписке на обычное Observable. Оператор forEach сам блокируется, пока BlockingObservable не завершится, и он сигнализирует о завершении, разблокировавшись, а не вызывая функцию обратного вызова. В случае ошибки он сгенерирует RuntimeException (а не вызовет аналог функции обратного вызова onError).
- Javadoc: BlockingObservable.forEach(Action1)
RxJS forEach subscribe subscribeOnCompleted subscribeOnError subscribeOnNext
В RxJS вы можете подписаться на Observable двумя способами:
- Подписать одну функцию на уведомления
onNext,onCompleted, илиonErrorот Observable, соответственно с использованиемsubscribeOnNext,subscribeOnCompleted, илиsubscribeOnError - Подписаться, передав от нуля до трех отдельных функций или объект, реализующий эти три функции, в операторы
subscribeилиforEach(эти операторы ведут себя одинаково).
Пример кода
var source = Rx.Observable.range(0, 3)
var subscription = source.subscribeOnNext(
function (x) {
console.log('Next: %s', x);
}); Next: 0 Next: 1 Next: 2
var source = Rx.Observable.range(0, 3);
var subscription = source.subscribeOnCompleted(
function () {
console.log('Completed');
}); Completed
var source = Rx.Observable.throw(new Error());
var subscription = source.subscribeOnError(
function (err) {
console.log('Error: %s', err);
}); Error: Error
var observer = Rx.Observer.create(
function (x) { console.log('Next: %s', x); },
function (err) { console.log('Error: %s', err); },
function () { console.log('Completed'); });
var source = Rx.Observable.range(0, 3)
var subscription = source.subscribe(observer); Next: 0 Next: 1 Next: 2 Completed
var source = Rx.Observable.range(0, 3)
var subscription = source.subscribe(
function (x) { console.log('Next: %s', x); },
function (err) { console.log('Error: %s', err); },
function () { console.log('Completed'); }); Next: 0 Next: 1 Next: 2 Completed
Функции, описанные в этом разделе, доступны во всех следующих дистрибутивах:
rx.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
RxPHP subscribe
RxPHP реализует этот оператор как subscribe.
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/subscribe.html