2017-05-04 7 views
2

を理解し、私は新しい演算子を作成したいと私は方法の一つは、このような何かをしていることをdocumentationで見つける:私はliftが何であるかを理解していないRxのJSリフト法

class MyObservable extends Observable { 
    lift(operator) { 
    const observable = new MyObservable() 
    observable.source = this; 
    observable.operator = operator; 
    return observable; 
    } 

    // put it here .. or .. 
    customOperator() { 
    /* do things and return an Observable */ 
    } 
} 

// ... put it here... 
MyObservable.prototype.mySimpleOperator = mySimpleOperator; 

方法と何がここで起こっている、誰かが助けてくれますか?

+0

元のGitHubの提案はそれをうまく説明しています:https://github.com/ReactiveX/RxJS/issues/60 – cartant

答えて

11

liftは、RxJS 5では常に内部的に使用されています。リフトの原則は、購読者がオペレータが定義する方法でイベントを転送する新しいObservableを準備することです。 Paul Taylor(https://youtu.be/QhjALubBQPg?t=19m)のビデオがあります。リフトは非常に基本的なビルディングブロックです。

Observableを拡張する新しいクラスを作成する代わりに、Operator自体を作成することもできます。オペレータのユーザーは、書面でそれを呼び出すことができます。

Observable.of(1, 2, 3) 
    .lift(new MyCustomOperator) 
    .subscribe() 

これは、誰がまだ別のオペレータが観測APIで提供されていますが、その代わりに、それは他の場所で定義された何かであることを認識していることを学ばなければならないことを意味します。

理想的には、

someObservable::myCustomOperator(); 

を書くことができますが、残念ながら、バインド・オペレータは、長い間離れて/は考えられないかもしれないので、.lift(operator)が最も明白な/きれいな方法のように思えます。

+0

私はこれをバインドオペレータの代わりに情報と考えたことはありません、それは簡単ですか? –