2016-12-02 9 views
0

こんにちは、私はRxJSを始めていると私は次の問題の解決策を持っているが、私はそれを好きではない、あなたがよりよい解決策を提供することを願って:RxJSオブザーバブルの切り替え方法と一時停止方法は?

は、我々は切り替えたい2つのストリームを持っている想像してみて

  • 要求
  • タイムアウト

その後、我々はそれらを切り替えるしたいのですが、一つは、他のイベントがあるとき再開され、これが一時停止されています。例えば。私たちは成功するとリクエストを行い、タイムアウトを行い、リクエストが完了したら、タイムアウトが終了したときなどを行います。

は、私の解決策では、私は間隔で要求をシミュレートし、私は「)(pausable」を使用、しかし私は、このソリューションのスケーラビリティを好きではない:

import Rx from 'rx'; 

const requestPauser = new Rx.Subject(); 
const requestStream = Rx.Observable.interval(500).pausable(requestPauser); 
const intervalPauser = new Rx.Subject(); 
const intervalStream = Rx.Observable.interval(500).pausable(intervalPauser); 


requestStream.subscribe(function(){ 
    requestStream.pause(); 
    intervalStream.resume(); 
    console.log("request"); 
}); 
intervalStream.subscribe(function(){ 
    requestStream.resume(); 
    intervalStream.pause(); 
    console.log("interval"); 
}); 

requestStream.resume(); 

RxJSの専門家は、この問題を解決する方法?

答えて

1

質問には回答があります。 私はpausableが本当に必要とされると思ういけないhttp://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap

requestStream.switchMap(()=>Rx.Observable.interval(500)); 

switchMap 示唆しています。

UPDATE

OPは最初、 ConcatMapが使用されるべき後に開始するために、第2の観察が必要なので。

+0

ありがとうSuraj、これで私は遅延がありますが、どのようにして両方を繰り返すループを作成できますか? const responseStream = Rx.Observable.fromPromise($ .getJSON( 'https://api.github.com/users')); responseStream.subscribe(()=> {console.log(1);}); responseStream.switchMap(()Rx.Observable.just(2).delay(500))subscribe(()=> { console.log(2); }); –

+0

申し訳ありませんが、これは間違っていました。なぜなら、2回目の購読は開始から実行され、1回目の購読が終了すると実行されなければならないからです。 –

+0

ok ..私の悪い..もっとよく見ていたはずです。 –

関連する問題