[RxJava] DoOnSubscribe, doFinally로 조금 스마트하게 쓰세요.
버전은 RxJava2.1.9입니다.
같은 처리를 두 군데에서...
VP에 프로그램을 설치하면 Presenter에 다음 코드를 쓰고 싶습니다.
SamplePresenter.kt
override fun onClick() {
view.showProgress()
sampleInteractor.getItems()
.subscribeBy(
onSuccess = {
// do something
view.hideProgress()
},
onError = {
// error handling
view.hideProgress()
}
).addTo(disposable)
}
View에서 클릭한 이벤트가 오면 진도를 표시하고, 어떤 처리를 하고, 성공한 경우onSuccess
나 오류가 발생한 경우onError
가 각각 진도를 숨기는 경우가 흔하다.
여기서 신경 쓰이는 것은 view.hideProgress()
의 처리가 두 곳에 있다는 것이다.만약 같은 처리가 있다면, 어떻게 한 곳에 쓸 수 있겠는가...
그때 사용할 수 있는 것은 doFinally
이다.
doFinally
Javadoc에서
Calls the specified action after this Single signals onSuccess or onError or gets disposed by the downstream.
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.결국 마지막으로 부르고 싶은 것이 있으면 여기에 쓰면 된다.(여기는 약간 자신이 없는 곳
아까 코드로 돌아가면 view.hideProgress()
마지막으로 부르고 싶은 처리이기 때문에 doFinally
아래와 같이 쓸 수 있습니다.
SamplePresenter.kt
override fun onClick() {
view.showProgress()
sampleInteractor.getItems()
.doFinally {
view.hideProgress()
}
.subscribeBy(
onSuccess = {
// do something
},
onError = {
// error handling
}
).addTo(disposable)
}
두 곳에 흩어져 있는 view.hideProgress()
을 한 곳으로 정리했습니다!
이번에 공동으로 진행된 처리는 view.hideProgress()
뿐이지만 여러 처리onSuccess
onError
를 반복하면 전망이 좋아진다.또 잊어버리는 것을 방지하는 데도 도움이 될 것 같다.
그렇다면 이 단계에서 코드로 충분하겠지만 view.showProgress()
고립된 느낌입니다. 어차피 Rx의 절차에 따라 기술하고 싶은데...!
그때 사용할 수 있는 것은 doOnSubscribe
이다.
doOnSubscribe
Javadoc에서
Calls the shared consumer with the Disposable sent through the onSubscribe for each SingleObserver that subscribes to the current Single.subscribe
라고 적혀 있을 때 불리는 것 같다.
바로 doOnSubscribe
로 다시 쓸게요.
SamplePresenter.kt
override fun onClick() {
sampleInteractor.getItems()
.doOnSubscribe {
view.showProgress()
}
.doFinally {
view.hideProgress()
}
.subscribeBy(
onSuccess = {
// do something
},
onError = {
// error handling
}
).addTo(disposable)
}
고립된 느낌view.showProgress()
이지만 Rx의 흐름을 잘 따라 조금 스마트하게 쓸 수 있겠죠!
총결산
override fun onClick() {
view.showProgress()
sampleInteractor.getItems()
.subscribeBy(
onSuccess = {
// do something
view.hideProgress()
},
onError = {
// error handling
view.hideProgress()
}
).addTo(disposable)
}
Javadoc에서
Calls the specified action after this Single signals onSuccess or onError or gets disposed by the downstream.
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.결국 마지막으로 부르고 싶은 것이 있으면 여기에 쓰면 된다.(여기는 약간 자신이 없는 곳
아까 코드로 돌아가면
view.hideProgress()
마지막으로 부르고 싶은 처리이기 때문에 doFinally
아래와 같이 쓸 수 있습니다.SamplePresenter.kt
override fun onClick() {
view.showProgress()
sampleInteractor.getItems()
.doFinally {
view.hideProgress()
}
.subscribeBy(
onSuccess = {
// do something
},
onError = {
// error handling
}
).addTo(disposable)
}
두 곳에 흩어져 있는 view.hideProgress()
을 한 곳으로 정리했습니다!이번에 공동으로 진행된 처리는
view.hideProgress()
뿐이지만 여러 처리onSuccess
onError
를 반복하면 전망이 좋아진다.또 잊어버리는 것을 방지하는 데도 도움이 될 것 같다.그렇다면 이 단계에서 코드로 충분하겠지만
view.showProgress()
고립된 느낌입니다. 어차피 Rx의 절차에 따라 기술하고 싶은데...!그때 사용할 수 있는 것은
doOnSubscribe
이다.doOnSubscribe
Javadoc에서
Calls the shared consumer with the Disposable sent through the onSubscribe for each SingleObserver that subscribes to the current Single.subscribe
라고 적혀 있을 때 불리는 것 같다.
바로 doOnSubscribe
로 다시 쓸게요.
SamplePresenter.kt
override fun onClick() {
sampleInteractor.getItems()
.doOnSubscribe {
view.showProgress()
}
.doFinally {
view.hideProgress()
}
.subscribeBy(
onSuccess = {
// do something
},
onError = {
// error handling
}
).addTo(disposable)
}
고립된 느낌view.showProgress()
이지만 Rx의 흐름을 잘 따라 조금 스마트하게 쓸 수 있겠죠!
총결산
override fun onClick() {
sampleInteractor.getItems()
.doOnSubscribe {
view.showProgress()
}
.doFinally {
view.hideProgress()
}
.subscribeBy(
onSuccess = {
// do something
},
onError = {
// error handling
}
).addTo(disposable)
}
doFinally
을 통해 두 곳에 흩어진 처리를 한 곳으로 정리한다.사용
doOnSubscribe
을 통해 Rx의 절차에 따라 기술할 수도 있습니다.참고 자료
[RxJava를 사용한 통신에서 진행 대화 상자 보내기]
https://qiita.com/boohbah/items/e8010730725c54f85a3a
Reference
이 문제에 관하여([RxJava] DoOnSubscribe, doFinally로 조금 스마트하게 쓰세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tsumuchan/items/b0075dbb3cc0298a68ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([RxJava] DoOnSubscribe, doFinally로 조금 스마트하게 쓰세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsumuchan/items/b0075dbb3cc0298a68ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)