Spec-Zone.ru › ReactiveX

Подписка

осуществлять операции над выбросами и уведомлениями из 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, если он может начать выброс элементов в любое время, а подписчик может начать наблюдение за последовательностью выброшенных элементов в какой-то момент после его начала, пропустив любые элементы, выброшенные до момента подписки.

См. также

  • Do
  • Введение в Rx: IObserver

Информация о языке

RxGroovy BlockingObservable.forEach forEach subscribe

RxGroovy реализует несколько вариантов subscribe.

Если вы не передадите никаких параметров, это вызовет подписку на базовое Observable, но проигнорирует его испускания и уведомления. Это активирует холодное Observable.

Вы также можете передать от одного до трех функций; они будут интерпретированы следующим образом:

  1. onNext
  2. onNext и onError
  3. 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. Вы можете передать от одного до трех функций, которые будут интерпретированы следующим образом:

  1. onNext
  2. onNext и onError
  3. onNext, onError, и onCompleted

В отличие от subscribe, forEach не возвращает объект, с помощью которого можно отменить подписку. У вас также нет возможности передать параметр, обладающий этой возможностью. Поэтому следует использовать этот оператор только в том случае, если вам определенно нужно обработать все испускания и уведомления от Observable.

  • Javadoc: forEach(Action1)
  • Javadoc: forEach(Action1,Action1)
  • Javadoc: forEach(Action1,Action1,Action0)
forEach

Также есть метод 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.

Вы также можете передать от одного до трех функций; они будут интерпретированы следующим образом:

  1. onNext
  2. onNext и onError
  3. 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. Вы можете передать от одного до трех функций, которые будут интерпретированы следующим образом:

  1. onNext
  2. onNext и onError
  3. onNext, onError, и onCompleted

В отличие от subscribe, forEach не возвращает объект, с помощью которого можно отменить подписку. У вас также нет возможности передать параметр, обладающий этой возможностью. Поэтому следует использовать этот оператор только в том случае, если вам определенно нужно обработать все испускания и уведомления от Observable.

  • Javadoc: forEach(Action1)
  • Javadoc: forEach(Action1,Action1)
  • Javadoc: forEach(Action1,Action1,Action0)
forEach

Также есть метод 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 двумя способами:

  1. Подписать одну функцию на уведомления onNext, onCompleted, или onError от Observable, соответственно с использованием subscribeOnNext, subscribeOnCompleted, или subscribeOnError
  2. Подписаться, передав от нуля до трех отдельных функций или объект, реализующий эти три функции, в операторы 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.js
  • rx.all.js
  • rx.all.compat.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxPHP subscribe

RxPHP реализует этот оператор как subscribe.

© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/subscribe.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API