2017-01-11 5 views
0

나는 '입력으로부터 keyup 이벤트를 수신하는 관찰 가능 (observable)을 가지고있다.뜨겁게 관찰 할 수있는 오류 처리

마다 keyup에서 서버에 요청을하고 값이없는 경우 예외를 throw합니다.

.map(function (oResp) { 
    if (oResp.data.results.length === 0) { 
    throw new Error(self.getTextBundle("insPlantInvalid")); 
    } 
    return oResp.data.results; 
}) 

예외가 발생 된 후 관측 가능 이벤트는 더 이상 이벤트를 수신하지 않습니다.

rxjs의 예외 처리가 이런 식으로 작동합니까?

답변

1

예, 올바른 동작입니다. 예외는 operator send an error 알립니다. error 또는 complete 신호는 방출 된 마지막 신호 여야하며 둘 다 cause unsubscription입니다.

오류를 다시 구독하거나 처리하려면 retry(), retryWhen(), catch() 또는 onErrorResumeNext()과 같은 연산자가 있습니다. 나는 당신이 이미 이것들을 알고 있다고 생각합니다.

+0

'catch()'로 시도해 보았는데 스트림이 그 이후에도 구독을 취소하겠습니까? –

+0

@zero_coding'catch()'로 무엇을 시도 했습니까? 'catch()'를 사용하면 소스 대신 다른 Observable을 구독 할 수 있습니다. – martin

+0

필자의 경우 사용자가 잘못된 값을 입력 필드에 입력하면 입력 필드가 빨간색으로 표시됩니다. 따라서 사용자가 유효한 값을 입력하면 붉은 색이 삭제됩니다. 'retryWhen()'를 사용하여 해결하는 것이 더 낫습니다. –

0

.catch() 또한 오류를 처리하는 데 사용할 수 있습니다.

this.http.get('url').map(res => res.json()).catch(() => Observable.of({error: true}) 

오류 이벤트 관찰 실 거예요 휴식의 경우 {error: true}를 반환합니다. 그러나이 응답 옆에있는지도 연산자에서이 경우를 처리해야합니다.

관련 문제