Materialize/Dematerialize

將發射的項目和發送的通知表示為發射的項目,或反轉此過程

Materialize

一個格式正確且有限的 Observable 會調用其觀察者的 onNext 方法零次或多次,然後會準確調用 onCompletedonError 方法一次。Materialize 操作符將這一系列調用 — 原始的 onNext 通知和終止的 onCompletedonError 通知 — 轉換為 Observable 發射的一系列項目

Dematerialize

Dematerialize 操作符則反轉此過程。它作用於先前被 Materialize 轉換過的 Observable,並將其恢復為原始形式。

另請參閱

特定語言資訊

待定

待定

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 預設情況下不使用任何特定的 Scheduler

dematerialize

dematerialize 反轉此過程:將來源 Observable 發射的 Notification 物件轉換為結果 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 預設情況下不使用任何特定的 Scheduler

materialize

在 RxJava 中,materialize 將來源 Observable 的通知轉換為 Notification 物件,並將其作為返回的 Observable 的發射內容。

materialize 預設情況下不使用任何特定的 Scheduler

dematerialize

dematerialize 反轉此過程:將來源 Observable 發射的 Notification 物件轉換為結果 Observable 的通知。

dematerialize 預設情況下不使用任何特定的 Scheduler

dematerialize

RxJS 僅實作了 dematerialize 操作符。如果想要一個「序列化」的 Observable,必須手動組裝,方法是手動建立並發射表示 Observable 通知呼叫的 Notification 物件。

範例程式碼

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

將 observable 序列的隱式通知序列化為顯式通知。

RxPHP 還有一個 dematerialize 操作符。

將 observable 序列的顯式通知值反序列化為隱式通知。

待定