2016-05-06 13 views
1

angular2非同期パイプはObservableまたはSubjectから値を取得しますか?

から非同期パイプが観測またはプロミスに加入し、それが放射された最新の値を返します。新しい値が発行されると、非同期パイプは変更があるかどうかをチェックするコンポーネントをマークします。

私の場合、XMLHttpRequestコールのxhr.upload.onprogressから生成されたイベントに非同期でサブスクライブする必要がある場合。私はSubjectまたはObservableを作成しますか?たびにイベントが来るとき、私は(件名または観察可能)この(非同期パイプを含む)すべての加入者にそれをプッシュする必要があり

xhr.upload.onprogress = (event) => { 
    this._progress = Math.round(event.loaded/event.total * 100); 
    this._subject.onNext(this._progress/100); // push the progress value to the async pipe who is the subscriber 
    }; 

答えて

2

は、次のいずれかを使用できますが、生で行うには、もう少し作業がありますオブザーバーを設定し、観測可能なものを熱くする必要があるので、観測可能です。次に、オブザーバーを使用して通知することができます。

observer$:Observer<number>; 

observable:Observable<number> = Observable.create(observer => { 
    this.observer$ = observer; 
}).share(); 

xhr.upload.onprogress = (event) => { 
    this._progress = Math.round(event.loaded/event.total * 100); 
    this.observer$.next(this._progress/100); 
}; 

件名では既にそうです(熱い、観察可能な/観察者を組み合わせた)。あなたの代わりにonNextnextを使用する必要があることに注意してください:

xhr.upload.onprogress = (event) => { 
    this._progress = Math.round(event.loaded/event.total * 100); 
    this._subject.next(this._progress/100); 
}; 
+0

TKSティエリ。少し恋をした。 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.mdでは、次のメソッドは表示されませんが、onNextのみが表示されますか?もう1つの質問は、あるオブザーバで関数を呼び出すと、他のオブザーバに通知できる理由です。サブスクライバに通知する観測者であってはなりませんか? – Hammer

+0

ありがとうございます!私はオブザーバーに値を送る方法を見出すためにあらゆるところを見てきました(これはSubjectのように扱います)。これは理にかなっています。 –

関連する問題