Rx勉強会
whenは複数のPlanオブジェクトを受け取り、そのPlan通り、並列にメッセージを送出するObservableを作成するメソッドです
planは複数のObservableから生成することができるので、Observableの合成によって、とても複雑なObservableができます
Planは複数のObservableをandでつなげてPatternを生成し、thenDoでPlanへと変換します
Patternがメッセージを送出するタイミングを表し、thenDoでそれぞれのタイミングで送出するメッセージを選択することで、Planオブジェクトが出来上がるというわけです
例1
var repeats = Rx.Observable.return("plan1").repeat(10); var timer = Rx.Observable.interval(1000); var pattern = repeats.and(timer);
例1では"plan1"という文字列を10回送出するストリームと、1000msごとに送出するストリームをandしてPatternを作っています
andでつなぐと、2つのストリームの値が揃った時に流れ、片方が終了したら終了するというPatternになります。
つまり、repeatストリームは瞬時に10回で終了するストリームで、timerは1秒ごとに無限に流れるストリームのため、andでつなぐと、1秒ごとに10回流れて終了するPatternになります
PatternはthenDoを使ってPlanへと変換します
thenDoはandでつないだ数分の複数の引数を受け取り、一つの値を返す関数を引数として与えます
例2
var repeats = Rx.Observable.return("plan1").repeat(10); var timer = Rx.Observable.interval(1000); var pattern = repeats.and(timer); var plan = pattern.thenDo((x:string,y:number):string => x);
例2はthenDoを使って、1秒ごとに10回plan1が流れて終了するPlanを作成している例です
これをwhenに入れるとObservableが出来上がります