2016-07-07 7 views
2

WebSocket接続があるので、接続が正しければ情報を取得しようとします。私はRxJSとの間隔でやろうとしています。問題は、1つのタイムアウト後にストリームが終了し、後で間隔を維持して、既に再接続されているかどうかを確認できることです。ここでRxJS:エラーなしのタイムアウト

function listenToConnectionLost() { 
     return rx.Observable 
      .interval(5000) // every 5 seconds 
      .flatMap(tryPing) 
      .distinctUntilChanged() 
      // so I want to have either "connected" or "timeout" here 
      // onNext I want to handle the different outputs 
     ; 
    } 

    function tryPing() { 
     var pingPromise = getPingPromise(); 
     var pingObservable = rx.Observable 
      .fromPromise(pingPromise) 
      .timeout(5000) 
      .catch(Rx.Observable.just('timeout')) // catches error, but 
                // completes the stream 
     ; 

     return pingObservable; 
    } 

    function getPingPromise() { 
     // returns a promise, which resolves when connection is upright 
    } 

私はまた、 "偽造" 間隔と実際の例があります:http://jsbin.com/gazuvu/4/edit?js,console

感謝を!

答えて

0

上記の投稿コードは、完成したストリームがlistenToConnectionLostのflatMapに入力されるため、が動作しています。私はgetPingPromiseに次のコードを挿入してテストしました。

function getPingPromise() { 
    if(Math.random() < 0.5) { 
    return $q.when('connected'); // resolves immediately 
    } 
    else { 
    return $q.defer().promise; // never resolves, triggers timeout 
    } 
} 
関連する問題