2016-07-07 5 views
2

websocket 연결이되어 있으면 연결 상태가 올바른지 확인하려고합니다. 나는 RxJS와 간격으로하려고합니다. 문제는 하나의 타임 아웃 후에 스트림이 끝나고 이후에 계속 간격을 두어 다시 연결되었는지 확인할 수있게하려는 것입니다. http://jsbin.com/gazuvu/4/edit?js,consoleRxJS : 오류/완료 시간 초과

감사 :

여기
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 
    } 

는 또한 간격 "위조"는 함께 라이브 예를!

답변

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 
    } 
}