728x90
반응형
샘플코드를 찾아보면 zipWith 나 take에 flatMap 을 조합하여 사용하는 코드가 많이 보인다.
// retrofit2 에 구성한 서비스의 타입은 Single 타입입니다.
retryWhen { error ->
error.zipWith(
Flowable.range(1, 3),
BiFunction<Throwable, Int, Int> { _, t2 -> t2 }
).flatMap { i ->
Flowable.timer(3, TimeUnit.SECONDS)
}
}
하지만 reactivex.io 에서 소개하는 방법이 간소하고 명확하게 보인다.
Flowable.timer(1, TimeUnit.SECONDS)
.doOnSubscribe(s -> System.out.println("subscribing"))
.map(v -> { throw new RuntimeException(); })
.retryWhen(errors -> {
AtomicInteger counter = new AtomicInteger();
return errors
.takeWhile(e -> counter.getAndIncrement() != 3)
.flatMap(e -> {
System.out.println("delay retry by " + counter.get() + " second(s)");
return Flowable.timer(counter.get(), TimeUnit.SECONDS);
});
})
.blockingSubscribe(System.out::println, System.out::println);
(reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html)
error가 Flowable<Thread> 로 넘어오는데 flatmap 이나 take로 받는다니?...
코드를 아무리봐도 동작하는게 이해가 가지 않았다.
다행이 소스가 공개되어 있고 디버깅을 하면 error가 FlowableProcessor 로 되어 있는것을 확인 수 있다. 아...!!!
반응형
'Development > Android' 카테고리의 다른 글
[android] SwipeRefreshLayout 간단하게 사용하기 (0) | 2021.03.29 |
---|---|
[android] ConstraintLayout chainStyle 활용하기 (packed) (0) | 2021.03.19 |
[android] onTouch 사용 시 ClickableViewAccessibility 주의 (0) | 2021.03.08 |
[android] 안드로이드 구글정책 타임라인(2021) (0) | 2021.03.05 |
[android] intent scheme 이란 무엇인가 (0) | 2021.03.04 |
댓글