2016-12-25 5 views
1

を放出するために開始します。なぜRx.Observable.ofは、私は次のコードしている

console.log('start'); 
 

 
//emit value every second 
 
const message = Rx.Observable.interval(1000); 
 
//emit value as soon as subscribed 
 
const trueObs =() => Rx.Observable.of(true); 
 
// start emitting delayed values as soon as trueObs emits 
 
const delayWhenExample = message.delayWhen(trueObs); 
 
//log values start logging after one second 
 
//ex. output: 0...1...2...3 
 
const subscribe = delayWhenExample.subscribe(val => console.log(val));
<script src="https://npmcdn.com/@reactivex/[email protected]/dist/global/Rx.umd.js"></script>

はなぜRx.Observable.of(true)開始subscribeに観察せずに値を発するように?
私は怠惰な評価としてRxJSのコンセプトを理解しています。私はそれが尋ねられるまで値を出しません。

+2

私はその質問を理解しているかどうかはわかりません。最後の行で 'subscribe'を呼び出しています。 –

+0

しかし、私は 'delayForFiveSeconds'ではなく' message'で購読しています –

答えて

1

変数delayWhenExampleは、delayWhen()を呼び出して作成された実際にはSubscriptionDelayObservableです。それは元のmessageを観測可能にし、それが引数として渡された観測可能性(delayForFiveSeconds)を保持します。 subscribe()に電話をすると、その値を計算するために必要なこれらの観測値の両方のシーンの裏にも加入します。

これは本当に怠惰な評価の全体的なアイデアです。あなたは必要なオブザーバブルを購読し、それが依存する他のオブザーバはすべて自動的にサブスクライブされますが、必要な場合のみ必要になります。登録解除も自動的に行われます。これは、多くの異なるソースからのデータを結合する場合に非常に便利です。

+0

助けてくれてありがとう。 –

1

私はRxjsとあまり慣れていないよV5が、ここで何が起こっているのか、おそらく次のとおりです。この中には、のように、おそらくdelayForFiveSecondsdelayWhenオペレータをサブスクリプションにリードを回すmessage.delayWhen(delayForFiveSeconds)

  • である、

    • あなたはdelayByExampleを購読します両方のオペランドに加入するには、delayWhen(message, delayForFiveSeconds)は、サブスクリプションにmessagedelayForFiveSecondsの両方につながるとdelayForFiveSecondsから値を受信したときに、その後messageから読み出された値が前方に渡されるすなわち。しかし、両方のサブスクリプションはサブスクリプション時にdelayWhenに発生します。
    • 最後の事はRx.Observable.of(true)がそう購読
    • に同期発光することで、delayWhenExample.subscribe(val => console.log(val))はすぐにあなたがより正確に行われているサブスクリプションの連鎖を理解したい場合は、あなたが参照できるtrue

    の排出をトリガします図示されたデータフローが付属していた答えSO以下:

  • 関連する問題