티스토리 뷰

안녕하세요 Hani입니다.

이번에는 asSingle 알아볼 거예요.

 

 

 

 

API 호출은 Single이나 Completable 등 한 번에 끝나는 경우가 대부분입니다.

하지만 배너 광고처럼 지속적으로 값을 받아와야 할 때는 Observable로 Stream을 살려둡니다.

 

만약 API 호출 후 Observable로 Stream을 반환하는 메서드만 구성해두었다면

이를 Single로 변환할 필요가 종종 있습니다.

 

observable.asSingle()

 

Observable은 error, completed를 방출할 때까지 element를 보낼 수 있고,

Single은 한 번의 Success 혹은 Failure를 보낼 수 있습니다.

 

 

 

 

 

 

AsSingle을 살펴보면

element가 두 번째 방출될 때 RxError.moreThanOneElement 에러를,

element가 아직 방출되지 않았고 completed가 내려왔을 때 RxError.noElements 에러를 냅니다.

 

즉, observable.asSingle의 의도는

element 방출 후 completed,

또는 error입니다.

 

따라서 observable이 다수의 element를 방출하는 것을 막아야 합니다.

 

 

 

observable.take(1).asSingle()

 take(1)은 좋은 대안이 될 수 있습니다.

 

 

 

 

take(n)는 element가 내려올 때 n개의 element를 받고나서 completed를 방출합니다.

take(1)은 1개의 element가 내려올 때 completed까지 내려주니 single의 의도와 잘 맞는 operator입니다.

  

댓글