2016-06-12 8 views
0

完了です。彼らはない完了している場合は、それらが何かを行う前に、完了するのを待って、何かはrxjs観測可能かどうかのチェックは、以下の擬似コードは、私はインスタンス化するときには、いくつかのWebサービス呼び出しを行うというクラスを持っている

の操作を行います。元のWebサービスの呼び出しが完了している場合、これはでも、トリガされ

私はrxjsの手法でこれをどうやって達成するのだろうと思いましたか?変数を設定してif文を使用するのではなく、

+1

を使用することができますか?ここでの大理石図の例。 rxmarbles.com。それは基本的にタイムライン上のインプットと期待されるアウトプットを提示します。 – user3743222

答えて

0

これを非同期ゲートと呼びます。 これは実際にRxで行うのはかなり簡単です。 Webサービス呼び出し可観測シーケンスをキャッシュする必要があります。 これらが完了したことを前提とした他の呼び出しでは、単に結果がflatMapになります。 これらは約束のものなので、結果は遅れている加入者には残ると思いますが、そうでない場合は、replay(1)のシーケンスが必要です。

のでpsudeoコード

var startUpData = Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users')) 
.flatMap(function() { 
    return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users')); 
}); 

var events = Rx.Observable....//Your event wired up here. 

//When an event 
events 
    .flatMap(function(evt){ 
     //Wait until the startUpData yeilds, but pass on the evt data instead. 
     return startUpData.map(function(){ return evt;}) 
//do something here knowing that your event has fired, but the web services have also completed. 
    .subscribe(); 

にあなたはマット・バレットがこのビデオに約51minutesでこのビデオでは非同期ゲートを説明見ることができます - https://youtu.be/Tp5mRlHwZ7M?t=51m30s

また包みswitchオペレータを検討する必要がありますあなたは重複するイベントを望まないでしょう

0

私はwithLatestFromまたはcombineLatestがあなたに何を求めていると信じています。

サービスから提供されたデータでボタンを1回だけクリックできるようにする場合は、withLatestFromを使用できます。以前にサービスが提供されたデータを使用してクリックされ続けにボタンを許可したい場合は、あなたが意図した行動の大理石の図を指定してくださいすることができcombineLatest

const futureEvent$ = Rx.Observable.timer(3000); 
const btnClick$ = Rx.Observable 
    .fromEvent(document.querySelector('button'), 'click'); 
const futureAndBtnClick$ = futureEvent$.combineLatest(btnClick$); 

futureAndBtnClick$.subscribe(x => console.log('click + future stuff happened')); 

jsbin example

関連する問題