2016-07-07 64 views
2

有一個websocket連接,我試圖獲得信息,如果連接是直立的。我嘗試使用RxJS和間隔。問題是,在一個超時後,流結束,我希望間隔後繼續,以便我可以看到它是否已經重新連接。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 
    } 
}