Spec-Zone.ru › ReactiveX

Материализация/Дематериализация

представляют как элементы, так и уведомления, отправленные как элементы, которые испускаются, или наоборот
Materialize

Хорошо сформированный, конечный Observable вызовет метод наблюдателя onNext ноль или более раз, а затем вызовет метод onCompleted или onError ровно один раз. Оператор Materialize преобразует этот ряд вызовов — как оригинальные уведомления onNext, так и завершающие уведомления onCompleted или onError — в ряд элементов, испускаемых Observable.

Dematerialize

Оператор Dematerialize выполняет обратный процесс. Он работает с Observable, который был ранее преобразован оператором Materialize, и возвращает его к исходному виду.

См. также

  • Введение в Rx: Материализация и дематериализация

Информация, специфичная для языка

RxGroovy dematerialize materialize

materialize

В RxGroovy, materialize преобразует уведомления из исходного Observable в объекты Notification и испускает их как испускаемые элементы возвращаемого Observable. Например:

Пример кода

numbers = Observable.from([1, 2, 3]);

numbers.materialize().subscribe(
  { if(rx.Notification.Kind.OnNext == it.kind) { println("Next: " + it.value); }
    else if(rx.Notification.Kind.OnCompleted == it.kind) { println("Completed"); }
    else if(rx.Notification.Kind.OnError == it.kind) { println("Error: " + it.exception); } },
  { println("Error: " + it.getMessage()); }, // onError
  { println("Sequence complete"); }          // onCompleted
);
Next: 1
Next: 2
Next: 3
Completed
Sequence complete

materialize по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: materialize()
dematerialize

dematerialize выполняет обратный процесс: преобразует испускаемые объекты Notification из исходного Observable в уведомления из результирующего Observable. Следующий пример дематериализует материализованный Observable из предыдущего раздела:

Пример кода

numbers = Observable.from([1, 2, 3]);

numbers.materialize().dematerialize().subscribe(
  { println(it); },                          // onNext
  { println("Error: " + it.getMessage()); }, // onError
  { println("Sequence complete"); }          // onCompleted
);
1
2
3
Sequence complete

dematerialize по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: dematerialize()

RxJava 1․x dematerialize materialize

materialize

В RxJava, materialize преобразует уведомления из исходного Observable в объекты Notification и испускает их как элементы, испускаемые возвращаемым Observable.

materialize по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: materialize()
dematerialize

dematerialize выполняет обратный процесс: преобразует испускаемые объекты Notification из исходного Observable в уведомления из результирующего Observable.

dematerialize по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: dematerialize()

RxJS dematerialize

dematerialize

RxJS реализует только оператор dematerialize. Если вам нужен «материализованный» Observable, вы должны собрать его вручную, создав и испустив объекты Notification, которые представляют вызовы уведомлений Observable.

Пример кода

var source = Rx.Observable
    .fromArray([
        Rx.Notification.createOnNext(42),
        Rx.Notification.createOnError(new Error('woops'))
    ])
    .dematerialize();

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x.toString()); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 42
Error: Error: woops

dematerialize можно найти во всех следующих дистрибутивах:

  • rx.js
  • rx.all.js
  • rx.all.compat.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxPHP materialize dematerialize

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

Материализует неявные уведомления последовательности наблюдаемых как явные уведомления.

RxPHP также имеет оператор dematerialize.

Дематериализует явные значения уведомлений последовательности наблюдаемых как неявные уведомления.

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

Spec-Zone.ru

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