Observablesでイベントを発生させるAPIをラップしています。現在、私のデータソースコードはdb.getEventEmitter()
でEventEmitter
を返しています。Observablesを遅延データソースとして使用する方法
const Datasource = {
getSomeData() {
return Observable.fromEvent(db.getEventEmitter(), 'value');
}
};
はしかし、実際にこれを使用するために、私はそうgetSomeData()
に後続の各呼び出しは、シーケンス全体を再初期化し、より多くのイベントエミッターを再作成するまで、または任意のデータを持っていないと、両方の機能をmemoizeする必要があり、それがReplaySubject
返してい私のコードは、多くのこのようなただ1つの機能のために定型のかなり多くをされて終わるすべての機能
const someDataCache = null;
const Datasource = {
getSomeData() {
if (someDataCache) { return someDataCache; }
const subject = new ReplaySubject(1);
Observable.fromEvent(db.getEventEmitter(), 'value').subscribe(subject);
someDataCache = subject;
return subject;
}
};
ために見えるので、望ましくなく、問題のより多くなると次の更新、ときそこにより多くのパラメータです。
これを達成するためのより良い/よりエレガントなデザインパターンはありますか?基本的に、私はそれをしたいと思います
- イベントエミッタは1つだけ作成されます。
- データソースを後で呼び出した呼び出し元は、最新の結果を取得します。
- イベントエミッタは、必要なときに作成されます。
しかし、今私はこのパターンがObservableパターンと戦っていると感じ、定型文句の束をもたらします。
"引数セット"が意味するものは本当に明確ではありません。また、 'publishReplay'を見ましたか? http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-publishReplay – cartant
@cartantああ、まさに私が探しているようだ!正しい方向に私を指してくれてありがとう。もしそれ以上の文書があればうれしいですが、私はいくつかの検索された例しか持っていません。 – kevmo314
最後にドキュメントが届きます。あなたはいつでも[v4 docs](https://github.com/Reactive-Extensions/RxJS/tree/master/doc)に戻ることができます。 [v4とv5の間の変更](https://github.com/ReactiveX/rxjs/blob/master/MIGRATION.md)に慣れていれば、それでも便利です。 – cartant