RxJS를 이용해 오류를 처리해 봅시다.
원문입니다 : https://www.thisdot.co/blog/going-reactive-with-rxjs
이 아티클에서는 RxJS로 오류를 처리하는 방법을 살펴보고
RxJS를 사용하여 간단하면서도 성능이 뛰어난 애플리케이션을 빌드하는 방법을 살펴보겠습니다.
오류 처리하기(Handling Errors)
RxJS는 이 작업을 아주 잘 수행할 수 있는 도구를 제공합니다!
RxJS를 사용한 몇 가지 기본적인 오류 처리 방법을 살펴보겠습니다.
기본적인 오류 처리
obs$.subscribe(
value => console.log("Received Value: ", value),
error => console.error("Received Error: ", error)
)
여기서 우리는 두 개의 다른 로직을 설정할 수 있습니다.
하나는 Observable에서 오류가 아닌 방출을 처리하고
다른 하나는 Observable에서 방출되는 오류를 정상적으로 처리합니다.
obs$.subscribe(
value => console.log("Received Value: ", value),
error => showErrorAlert(error)
)
이렇게 하면 사용자의 혼란을 최소화하는 데 도움이 되며
추측에 맡기는 대신 실제로 적절하게 작동하지 않았다는 즉각적인 피드백을 제공할 수 있습니다.
의미있는 오류 합성하기
그러나 때때로 우리는 스스로 오류를 발생시키고 싶은 상황이 있을 수 있습니다.
예를 들어 수신한 일부 데이터가 정확하지 않거나 일부 유효성 검사가 실패했을 수 있습니다.
RxJS는 그렇게 할 수 있는 연산자를 제공합니다.
API에서 값을 수신하지만 앱의 다른 측면이 올바르게 작동하지 않게 하는
누락된 데이터가 있는 예를 들어 보겠습니다.
obs$
.pipe(
mergeMap((value) =>
!value.id ? throwError("Data does not have an ID") : of(value)
)
)
.subscribe(
(value) => console.log(value),
(error) => console.error("error", error)
);
Observable에서 ID가 포함되지 않은 값을 받으면 정상적으로 처리할 수 있는 오류가 발생합니다.
참고: throwError를 사용하면 더 이상 Observable 방출이 수신되지 않습니다.
고급 에러처리
우리는 사용자의 너무 많은 중단을 방지하기 위해 반응적으로 오류를 처리할 수 있다는 것을 배웠습니다.
그러나 오류가 발생하거나 재시도를 수행할 때 여러 작업을 수행하려면 어떻게 해야 합니까?
머지맵은 리턴되는 옵저버블에서 방출되는 값을 모두 합친 하나의 옵저버블을 리턴합니다.
스위치맵은 리턴되는 옵저버블에서 방출하는 마지막 값만 합친 하나의 옵저저블을 리턴합니다.
obs$
.pipe(
mergeMap((value) =>
!value.id ? throwError("Data does not have an ID") : of(value)
),
retry(2),
catchError((error) => {
// Handle error gracefully here
console.error("Error: ", error);
return EMPTY;
})
)
.subscribe(
(value) => console.log(value),
() => console.log("completed")
);
오류에 도달하면 EMPTY 옵저버블을 내보내고
EMTYP 옵저버블을 방출하는 것은 옵저버블을 완료합니다.
위의 오류 방출 출력은 다음과 같습니다.
Error: Data does not have an ID
completed
앞으로 추가로 다룰 게시물들
- https://medium.com/dailyjs/using-redux-observable-to-handle-asynchronous-logic-in-redux-d49194742522
- https://www.thisdot.co/blog/form-validation-using-rxjs-and-typescript
- https://www.thisdot.co/blog/understanding-switchmap-and-forkjoin-operators-in-rxjs-with-typescript
- https://www.thisdot.co/blog/form-handling-using-rxjs-and-typescript
- https://www.thisdot.co/blog/understanding-flatmap-mergemap-and-toarray-operators-in-rxjs-with-typescript
'FrontEnd' 카테고리의 다른 글
UI 치트 시트 : 간격의 우정(UI cheat sheet: Spacing friendships) (0) | 2022.10.11 |
---|---|
RxJS로 HTTP 리턴 데이터 매핑하기 (0) | 2022.10.08 |
RxJS Subscriptions(구독) 관리 모범 사례 (0) | 2022.10.08 |
RxJS로 옵저버블을 만드는 방법 (0) | 2022.10.08 |
RxJS 기본 Operator와 사용방법 (0) | 2022.10.08 |