2017-02-07 25 views
2

私はX秒ごとに行動を完了するはずの観測可能性を持っています。 Xの値は動的に変化します。私は実行時にこの間隔をオンザフライでどのように変更するかについて頭を悩ませていました。私が理解できることから、私の思考の大きなブレークスルーは、Observablesが定義された後はObservableが変更できないということでした。したがって、新しい間隔値でObservalbeを再定義しようとするのは正しい方法ではありません。私はhttps://www.learnrxjs.io/operators/transformation/switchmap.htmlrxjs observable変化する間隔

に位置コードで動作するようにしようとしている

はこれまでのところ、私はswitchMapは、少なくとも正しい軌道に乗っていると思います。誰かが私に助けになるかもしれないリソースを例に挙げたり、私に指摘したりすることはできますか?

非常にうまくいけば、workdにはもっと多くのRxJの例が必要です。

答えて

3

SubjectswitchMapintervalと一緒に使用して動的に期間を制御できます。被写体が値を発するたび、その値は、インターバルの期間を指定するために使用することができます:Google社員を支援するために実施例を追加

const t = Date.now(); 
 

 
let subject = new Rx.Subject(); 
 
subject 
 
    .switchMap(period => Rx.Observable.interval(period)) 
 
    .do(() => console.log('some action at time T+' + (Date.now() - t))) 
 
    .take(8) 
 
    .subscribe(); 
 

 
subject.next(50); 
 
setTimeout(() => subject.next(100), 200); 
 
setTimeout(() => subject.next(200), 400);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

2

HTML:

<body> 
    <button id="start">Start</button> 
    <button id="stop">Stop</button> 
    <button id="update">Update</button> 
    <input id="i1" value=100></input> 
</body> 

JavaScript(タイプスクリプト):

let startButton = document.getElementById('start'); 
let stopButton = document.getElementById('stop'); 
let updateButton = document.getElementById('update'); 
let i1 = document.getElementById('i1'); 

const start$ = Rx.Observable.fromEvent(startButton, 'click'); 
const stop$ = Rx.Observable.fromEvent(stopButton, 'click'); 
const update$ = Rx.Observable.fromEvent(updateButton, 'click') 

const period =() => (parseInt(i1.value)); 


Rx.Observable.merge(
    start$, 
    update$, 
) 
    .switchMap(() => { 
    return Rx.Observable.interval(period()).takeUntil(stop$); 
    }) 
    .subscribe(res => { 
    console.log('here in the subscription:' + res); 
    }) 
関連する問題