2017-11-17 9 views
2

enter image description hererxjs:私はsocket.io実装を経由してバックエンドと通信角度でターンベースのゲームに取り組んでいますどのように均等に観測

を介した応答のスペースレンダリング。私のコンポーネントでは、サーバーからのいくつかの種類の通信をリッスンしています。各通信は、サーバー内のデータの現在の状態を反映するために、ビューを更新する方法に関する情報を提供します。

今すぐ更新がコンポーネントのデータに適用されます。しかし、私は、各更新プログラムのレンダリングを、ユーザーが各更新プログラムの効果を見るための時間を持つように、いくつかの遅延を伴ってレンダリングしたいと考えています。

(私は何をしようとしている本質的のために先頭に私の画像を参照してください)

私はsubscribeOn演算子を経由して、これを達成するであろうと信じているが、私の「間隔」Nを指定する方法がわかりません。

const example = Rx.Observable 
    .create(observer => { 
    observer.next(0); 
    observer.next(1); 
    observer.next(2); 
    setTimeout(() => { 
     observer.next(3); 
     observer.next(4); 
     observer.complete(); 
    }, 2500); 
    }); 

const source = example 
    .subscribeOn(Scheduler.timeout); 

source.subscribe(console.log); 
+0

をあなたには、いくつかのコードを表示することができますか?あなたは現在何が働いていませんか? – Lansana

+0

4が届かない場合はどうなりますか? – estus

+1

2つの別々の問題があると思われます。両方とも非常に興味深く、むしろ重要ではありません。質問を2つに分割することを提案します。 –

答えて

2

次のようにconcatMap演算子を使用します。

const nInterval = 500; 
 

 
const example$ = Rx.Observable.from([0, 1, 2]) 
 
    .concat(Rx.Observable.from([3,4]).delay(2500)); 
 

 
const source$ = example$ 
 
    .concatMap(item => 
 
    Rx.Observable.of(item) 
 
     .concat(
 
     Rx.Observable.of('ignored') 
 
      .delay(nInterval) 
 
      .ignoreElements() 
 
    ) 
 
); 
 

 
source$.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.min.js"></script>

+0

私が ' (x、y)=> x) 'のように 'timer'演算子を使用しています。 – bygrace

+0

TestSchedulerを使用して画像の例とよく一致するサンプルを作成する方法はありますか? rxjs4には、トリックを行うTestScheduler(https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md)がありますが、rxjs5相当のものを見つけるのは難しいですね。 – ZackDeRose

関連する問題