worldint
mathengi
worldint
전체 방문자
오늘
어제
  • 분류 전체보기 (152)
    • infra, cloud (4)
      • aws (4)
    • TIL,WIL(일간,주간 회고) (57)
    • 컴퓨터 공학 (5)
      • 정보통신 (3)
      • 컴퓨터 구조 (2)
    • Math (1)
      • linear algebra (0)
      • 명제와 집합 (1)
    • Operating System (8)
      • Linux Ubuntu (1)
    • programming (66)
      • c , c++ (9)
      • c# (0)
      • java (2)
      • javascript (14)
      • Python (4)
      • github (1)
      • programing terms (12)
      • html, css (2)
      • docker (3)
      • algorithm_datastructure (5)
      • database (11)
      • flutter(dart) (2)
    • 항해99 부트캠프 (7)
      • 사전교육 (7)
    • 보안관련 (1)

블로그 메뉴

    공지사항

    인기 글

    태그

    • db데드락
    • ci/cd
    • NoSQL
    • 디비데드락
    • flutter #provider #error
    • AWS
    • EC2
    • ec2 #코드디플로이 #리눅스
    • docker
    • Blue/Green
    • Javascript
    • NVM
    • CloudFront
    • nodejs
    • MongoDB
    • node
    • MONGOOSE

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    worldint

    mathengi

    TIL,WIL(일간,주간 회고)

    [TIL][트러블 슈팅][rxjs]에러 처리

    2024. 6. 22. 21:35

    회사에서 rxjs를 사용하는 부분이 있는데
    pipe안에 여러개의 concatMap을 사용중이고

    저 rxjs를 사용하는 함수가 아래 코드처럼 try catch로 감싸져있어서

    try{
      funcA() //rxjs사용 함수
    }catch(e){
        throw new InternalServer에러(e)
    }

    함수에서 에러가나면 throw로 잘 던지고 있는줄 알았는데

    서버 crash나고 있었음 (pm2로 금방 다시 시작은 됨)

    확인해보니 rxjs의 pipe내부에서 발생한 에러는

    try catch에서 잡히지 않음

    try {
      const source$ = rxjs.of(1, 2, 3);
      const mapped$ = source$.pipe(
        rxjs.operators.map(value => {
          if (value === 2) {
            throw new Error("Something went wrong!");
          }
          return value;
        })
      );
    
      mapped$.subscribe(value => console.log(value));
    } catch (error) {
      console.log("Caught an error:", error);
    }

    이런 코드가 있을 때
    value변수에 1,2,3 차례로 값이 들어가게 되고
    2의 차레에서 throw로 에러가 발생해 catch로 갈 것 으로 예상되지만

    subscribe 메소드는 즉시 반환됨
    그니까 저 위에 pipe내부에 작성한 코드들은 subscribe()를 호출했을때 부터 동작을 하는데
    subscribe는 호출 즉시 끝나고 저 pipe부분의 동작만 따로 비동기적으로 돌고 있는 그런 개념임

    그래서 try부분의 코드가 이미 다 끝난 뒤에 나온 에러이기 때문에 try catch에서는 잡을수 없고
    따로 rxjs에서 에러처리하는 방식으로 처리를 해야한다

    const items$ = from(items).pipe(
        concatMap((item) => {
          //-----생략
          return of(item);
        }),
        catchError((err) => {
          return throwError(() => err);
        }),
      );
    
      items$.subscribe({
        next: (val) => {
          myArr.push(val);
        },
        error: (err) => {
          console.log(err);
        },
      });

    pipe에 catchError를 통해서 에러를 던져주고
    그걸 subscribe에서 저렇게 처리를 하면된다

    'TIL,WIL(일간,주간 회고)' 카테고리의 다른 글

    [node][nvm][turbo][pnpm] 트러블 슈팅  (0) 2024.07.05
    [TIL] http/1.1와 http/2 차이  (0) 2024.05.06
    [TIL]<s3, nestjs, aws-sdk> listObjectsV2 access denied 에러  (0) 2024.04.02
    [TIL]github actions aws-credential 에러 (간단한 트러블 슈팅)  (0) 2023.10.28
    [TIL] mongoose(몽고디비) dot notation, filtered positional operator  (0) 2023.10.25
      'TIL,WIL(일간,주간 회고)' 카테고리의 다른 글
      • [node][nvm][turbo][pnpm] 트러블 슈팅
      • [TIL] http/1.1와 http/2 차이
      • [TIL]<s3, nestjs, aws-sdk> listObjectsV2 access denied 에러
      • [TIL]github actions aws-credential 에러 (간단한 트러블 슈팅)
      worldint
      worldint
      공부한 내용들, 트러블 슈팅 용 블로그

      티스토리툴바