Skip to content

[Project Reactor] doOnError vs onErrorResume #4

@dkdud9261

Description

@dkdud9261

doOnError : 예외가 지나가는 곳

  • 예외가 발생했을 때 어떤 동작을 수행하는 데 사용된다.
  • 예외를 소비하거나 처리하는 용도로 사용되며, 예외를 처리한 후에도 스트림은 종료되지 않고 계속 진행된다.
    • 예외는 그대로 던져져 있는 상태라는 것. catch 된게 아님
  • 주로 로깅이나 메트릭 수집과 같은 부가적인 작업을 수행하기 위해 사용된다.
Mono.error<String>(RuntimeException("예외 발생"))
  .doOnError { throwable ->
    println()
  }
  .subscribe(
    { value -> println(value) },
    { error -> println(error) }
  )

onErrorResume : 예외 처리 끝

  • 예외가 발생했을 때 대체 스트림이나 값을 제공하여 계속 진행하는 데 사용한다.
  • 예외를 캐치하고 대체 스트림이나 값을 발생시켜 계속 진행된다.
  • 주로 예외를 특정한 값으로 대체하거나 다른 스트림으로 전환하는 데 사용된다.
Mono.error<String>(RuntimeException("예외 발생"))
  .onErrorResume { throwable ->
    println()
    Mono.just("hello")
  }
  .subscribe(
    { value -> println(value) },
    { error -> println(error) }
  )

+) 아래처럼 하면 에러 발생 시 둘 다에 들어감 / 순서 반대로하면 onErrorResume에만 들어감 그기서 끝나니까

.doOnError {}
.onErrorResume {}

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions