Материализация/Дематериализация
представляют как элементы, так и уведомления, отправленные как элементы, которые испускаются, или наоборот
Хорошо сформированный, конечный Observable вызовет метод наблюдателя onNext ноль или более раз, а затем вызовет метод onCompleted или onError ровно один раз. Оператор Materialize преобразует этот ряд вызовов — как оригинальные уведомления onNext, так и завершающие уведомления onCompleted или onError — в ряд элементов, испускаемых Observable.
Оператор Dematerialize выполняет обратный процесс. Он работает с Observable, который был ранее преобразован оператором Materialize, и возвращает его к исходному виду.
См. также
Информация, специфичная для языка
RxGroovy dematerialize 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 выполняет обратный процесс: преобразует испускаемые объекты 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
В RxJava, materialize преобразует уведомления из исходного Observable в объекты Notification и испускает их как элементы, испускаемые возвращаемым Observable.
materialize по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
materialize()
dematerialize выполняет обратный процесс: преобразует испускаемые объекты Notification из исходного Observable в уведомления из результирующего Observable.
dematerialize по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
dematerialize()
RxJS 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.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.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