let
演算子(https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/let.md)の例と説明は明確ではありません。誰も良い例/説明を持っています。let
の演算子はどのように動作しますか?Rx.Observable.prototype.letオペレータの使い方は?
15
A
答えて
39
&tldr;
これはロジックを区分し、パイプラインに注入することができるための便利な機能です。
長い説明
sourceは、おそらく最も決定的な説明です。実際には、ソースObservable
で呼び出される関数を渡すだけです。
Rx.Observable.prototype.let = function(fn) {
return fn(this);
}
このユーティリティは、複数のソースに対して再利用するパイプラインを作成または事前定義できるということです。
// Listen to a key up event on the search bar
// and emit the value of the search
Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value)
// Don't search too eagerly
.filter(text => text.length > 3)
.debounceTime(500)
//Search logic
.flatMap(text => $.getJSON(`my/search/api?q=${text}`))
.flatMap({results} => results)
//Handler
.subscribe(appendToList);
上記の説明は、パイプラインの作成方法の基本的な意味を示すはずです。このロジックのいくつかを抽象化してコードをクリーンアップするか、別の場所で使用できるようにする場合は、通常は新しい演算子を作成することを意味するため、ちょっと難しいかもしれません。
解決策は、一般的なロジックをソースObservable
に渡すことができる関数にプルする比較的単純なアプローチであり、そのロジックが適用された新しいObservable
を返します。
したがって、上記のなる可能性があります:
//Defined in pipelines.js
function filterBuilder(minText, debounceTime) {
return (source) =>
source.filter(text => text.length > minText)
.debounce(debounceTime);
}
function queryBuilder(baseUrl) {
return (source) =>
source.flatMap(text => $.getJSON(`${baseUrl}?q=${text}`))
.flatMap({results} => results);
}
//In your application code
Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value)
.let(filterBuilder(3, 500))
.let(queryBuilder('my/search/api'))
.subscribe(appendResults);
関連する問題
- 1. オペレータのあいまいな使用 '>'
- 2. ||オペレータは?
- 3. オペレータは
- 4. "!"の違いと "。"オペレータ
- 5. C++少ないオペレータは
- 6. ないオペレータ
- 7. ないオペレータ
- 8. オペレータ新しい
- 9. あるオペレータから別のオペレータにデータを渡す方法
- 10. if-elseステートメントの "等しい"オペレータと "等しくない"オペレータ
- 11. またはオペレータ
- 12. Pythonで、オペレータは./
- 13. ジェネリック型は、オペレータ
- 14. **オペレータはTypeError
- 15. オペレータ版と非オペレータ版のPythonセット操作の違い
- 16. オペレータ
- 17. オペレータ
- 18. オペレータ=
- 19. オペレータを除いて
- 20. 前方:: STDおよびオペレータ()
- 21. Pythonのオペレータがオーバーライド:__ge__結果はPythonのオペレータがオーバーライド約
- 22. オーバーロード出力オペレータは
- 23. SQL Serverクエリは、オペレータ
- 24. ドリルは、オペレータがUNSUPPORTED_OPERATION
- 25. 使用する際のパラメータを渡す方法/オペレータ
- 26. Philips Hue "ddx"と "stable/not stable"オペレータの使用方法
- 27. オペレータの使用方法を示すJavaプログラム
- 28. エアフロー:オペレータ以外のマクロの使用
- 29. 音訳オペレータの変数の使用
- 30. Jモックでオブジェクトをモックする方法は?新しいオペレータ
switchMap'がmap' 'にある'としてlet'がSELECT' 'にある'ように聞こえます。しかし、 'select'は' map'ですから、 'let'と' switchMap'とはどう違うのですか? –
@JohnChristopherJonesは本当にありません。 1つは、 'select'と' map'はお互いのエイリアスと同じ関数です。 'let'は、ある抽象的な' source'に基づいてパイプラインを定義し、それを具体的なソースに差し込むことを可能にすることによって、懸念をきれいに分離することです。 – paulpdaniels
ありがとうございます。私は、[github.com/ngrx/example-app]のセレクタパターンの例で 'select'と' let'の両方を見てきました。したがって、jQueryの用語では、 'let'は文字通りメソッド連鎖呼び出しであり、メソッドチェーンのセクションをパラメータ化できます。あるいは、 'switchMap'と比較するために渡す関数はObservablesを返さなければなりませんが、' switchMap'はストリームメンバーを受け取り、 'let'はストリーム自体を受け取ります。 –