728x90
SMALL
실제 두개의 액션을 실행시켜 동작시
throw 즉 에러를 강제로 던지거나 예외사항이 발생했을때
downStream으로 가지 않는 이슈가 있었다.
combine(
action1(query),
action2(query)
) { action1, action2 ->
action1 to action2
}.collect { entity ->
...
}
catch를 통해 upStream에 대한 예외처리를 하면 되지만 왜 그런지 내부를 살펴보자.
실제 combine 내부의 동작을 보면
내부에 result 액션에 대한 동작을 channel을 통해 가져와 동작시키게 되어있지만,
결과 액션 이후 result를 transform 하여 변경된 응답값을 뱉는 과정을 타야하지만
실제 while문 내부 resultChannel.receiveCatching() <- 에러가 있을경우 break문을 타게되어 하나라도 에러가 나게 된다면
실행되지 않는다.
combine(
action1(query),
action2(query)
) { action1, action2 ->
action1 to action2
}
.catch{
emit(failure)
}
.collect { entity ->
...
}
따라서 upStream에 대한 에러처리를 위해 catch block을 통해 원하는 에러값을 반환해주어야 한다.
728x90
LIST
'IT > kotlin' 카테고리의 다른 글
[flow] coroutine flow 문서 읽기 -2 (0) | 2022.05.17 |
---|---|
[flow] coroutine flow 문서 읽기 -1 (0) | 2022.05.10 |
[코틀린] 코틀린 제너릭 (0) | 2019.12.27 |
[코틀린] kapt (0) | 2019.12.27 |
[코틀린] let, with, run, also, apply 정리 (0) | 2019.12.05 |