2016-07-22 2 views
1

私は、サーバーからのユーザーのリストを持つクラスを持っています。
他のクラスでは、サーバー上のリストを操作できます。追加または削除操作を呼び出します。
My Core-Classには、サーバー上のリストを操作している他のクラスへの参照があります。Observableを使用したクラス間の通知

私はしたいと思います:

  • はコアクラスは、プラグインによって、リストが上で操作されたたびに通知されます
  • 最初にリストを取得するには、コア・クラスでのinitの呼び出しを行いますサーバであるため、Core-Classはサーバから再度リストを取得します。
  • リストがリロードされたことを他のクラスに通知し、新しいリストを転送します。

マイ構造

Core { 

    users: []; 

    plugin1: Plugin; 
    plugin2: Plugin; 

    //Get a new list of users from the server 
    loadUsers() { 
     userService.loadUsers.then(function (res) { 
     this.users = res; 
     }) 
    } 

    } 

    Plugin { 

    //sends a request to the server to create a special user, 
    //depending on plugin implementation 
    createUser(); 
    } 

私はちょうどRXを使用するのでは始めています。私は工場の方法、暑い対寒い観察可能な他の基本的なものを理解しています。しかし、私は正しい方法でrxでそれをする方法を想像することはできません。

ありがとうございました。反応実装の

+0

"リストがリロードされたことを他のクラスに通知し、新しいリストを転送します。" Coreでobservableを作成して他のクラスにsubscribeすることはできませんか?あなたはobservableをクラスの属性にすることも、共同クラスがun/subscribeするためのsubscribeメソッドを追加することもできます。 – pdoherty926

+0

私はリストをリフレッシュするためにオブザーバブルを作成します。他のクラスは、新しいリストがあるときにそれを通知するためにそれを購読します。リフレッシュが必要なクラスによって、この観測可能性がどのようにトリガーされるか – user5931608

+0

1)消費者は、「リフレッシュ」との違いを知らないでください。そうでなければ、値がリストに追加されます。 2)コアにリフレッシュメソッドを追加して、データを取り出し、それをストリームに配置します。 – pdoherty926

答えて

1

私の考えは次のようになります。あなたのUserServiceので

は、次の行を追加します。

var loadSubject = new Subject(); 
var usersObservable = loadSubject.flatMap(
    Observable.fromPromise(<your http call that returns promise>)).share() 

function loadUsers(){ 
    loadSubject.next(true); 
} 

その後、変更を加えた各プラグインは、単に呼び出します。

userService.loadUsers(); 

あなたのコア、プラグイン、および更新したい他のクラスは、単に次のようにします:

loadService.usersObservable.subscribe(function(usersFreshValue){ 
    this.users = usersFreshValue; 
}) 

データの重複を避けるために '.share()'を使用しました。

考えられる改善:代わりにloadUsers方法の

  1. は、各プラグインはuserService.loadSubject.next(true)を呼び出す持っています。

  2. バックプレッシャ/バッファリング演算子を使用して、頻繁にコールすることを避けます。例えば、デバウンス(注意:誤って使用すると飢餓の原因となる可能性があります)またはbufferWithTime +フィルタ(空のバッファでトリガーしないようにする)などです。値。

+0

件名を使用している場合は、共有は依然として必要です。件名はホット/マルチキャストでは観測できないのですか? – user5931608

+0

私は知って欲しい:-) 私は各加入者とのデータの重複を避けるために共有を使いました。 – Meir

関連する問題