2017-09-17 1 views
0

は、私がfrom subscriber 1from subsriber 2100回を印刷得ることを期待次のコード角度4の加入者間で観測可能なシェアを作る方法は?

getObservable() { 
    return this.http.get('get_something').map(
     data => { 
      return true; 
     }, 
     err => { 
      return false; 
     } 
    ); 
} 

subscriber_1 = this.getObservable().subscribe(
    data => { 
     console.log("from subscriber 1", data); 
    } 
); 

subscriber_2 = this.getObservable().subscribe(
    data => { 
     console.log("from subsriber 2", data); 
    } 
); 

for (var _i = 0; _i < 100; _i++) { 
    this.getObservable() 
} 

を考えてみましょう。しかし、印刷されるのは1時間だけです。

私はobservablesがベクトルでスカラーではないと思ったので、いつでも同じobservableが呼び出されると、すべてのサブスクライバが呼び出されます。

私は何か間違っている必要があります。

助けてもらえますか?ここで

おかげ

+0

関数を2回呼び出しているので、return文で2回リクエストを呼び出しています。あなたのクラスのメンバを '* Subject 'としてタイプさせるべきです。あなたはそれを日焼けさせることができます。そして、値をプッシュしてオブザーバに通知します。 –

+0

コンソール出力のスクリーンショットを表示できますか? (ちょうど1つの出力がコンソールで繰り返されているときに同じ行に 'バブル'として出力内の 'カウント'の増加が見られないようにしたい) – amal

答えて

1

は、あなたが何をすべきかです:

  1. あなたが要求を作成し、いくつかの値を返す関数を作成します。
  2. 最初のサブスクライバsubscriber_1が要求を出しています。サブスクライブ機能を呼び出すと、現在の要求が応答を受信するのを待っています。
  3. ループを実行すると、ただリクエストを出しています。あなたはこれらの要求に対する応答を処理するために何もしていません。

これまでのところ、RxJSのSubjectを使用したいと思っています。ここで

let subject: Subject<any> = new Subject<any>(); 

// Anytime the subject value is changed a notification is triggered 
// The subscribe function is handling it 
let subscriber_1 = subject.AsObservable().subcribe((data) => { 
    console.log(data); 
    return data; 
}) 

// Trigger a notification 100 times 
for(let i = 0; i < 100; i++) { 
    subject.next(i); 
} 

はあなたが観察可能なパターンを実装する必要がRxJSを使用したくない場合は、よりおよそSubjectクラスhttps://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93

それとも

を理解することができる一つの良い品です。

http://www.dofactory.com/javascript/observer-design-patternここでは例を挙げて説明します。

関連する問題