RxJava에서 Observable, Completable 및 Single의 차이점은 무엇입니까?
누구든지 명확한 예제를 통해 RxJava에서 Observable, Completable 및 Single의 차이점을 설명해 주시겠습니까?
어떤 시나리오에서 우리는 다른 것보다 하나를 사용합니까?
Observable
시간이 지남에 따라 값을 방출하는 이벤트 소스의 일반적인 ReactiveX 빌딩 블록입니다. (따라서 ReactiveX가 확장 된 모든 언어에 존재)
짧은 Observable 이벤트는 다음과 같습니다.
onNext * (onCompleted | onError)? / (* 0 개 이상?-0 개 또는 1 개)
Single
및 Completable
유형의 감소 표현한다 RxJava에 독점적으로 도입 된 새로운 유형입니다 Observable
보다 간결 API를 가지고.
Single
Observable
단일 값 또는 오류를 방출한다는 것을 나타냅니다 .
Completable
표현 Observable
, 그 방출한다 가치가없는,하지만 터미널 이벤트 중 하나 onError
또는onCompleted
다음을 반환하는 메서드의 차이점과 같은 차이점을 생각할 수 있습니다.
개체 컬렉션-관찰 가능
단일 개체-단일
값을 반환하지 않는 메서드 (void 메서드)-완료 가능.
Single
작업 지향 Observable이 있고 한 번 수행되는 Network 요청 및 반환 값 (또는 오류)과 같은 단일 값을 기대할 때 적합 할 수 있으며, 네트워크 호출이 한 번에 작동하므로 추가 값을 반환 할 것으로 기대하지 않습니다. 시간이 지남에. 또 다른 예는 DB 페치 데이터 작업입니다.
Completable
를 가지고 있고 Observable
작업으로 인한 값에 대해 신경 쓰지 않거나 아무것도없는 경우에 적합합니다. 예를 들어 캐시를 업데이트하는 경우 작업이 성공 / 실패 할 수 있지만 값은 없습니다.
또 다른 예는 아무것도 반환하지 않는 장기 실행 초기화 작업입니다. 성공 표시만으로 발생한 UPDATE / PUT 네트워크 호출 일 수 있습니다.
어쨌든 Completable과 Single은 새로운 기능을 추가하지 않지만 더 강력하고 간결한 API를 도입하여 API가 노출 한 Observable 뒤에있는 작업에 대해 더 많이 알려줍니다.
편집하다:
RxJava2 Maybe
:
RxJava2라는 새로운 유형을 추가 Maybe
, Maybe
의 조합 Completable
및 단일.
위와 같은 언어 에서 어떤 유형 Maybe
을 반환하는 메서드로 생각할 수 있으며 Optional
, Optional
객체에 값이 있는지 여부를 명시 적으로 알려주는 Object
(null 대신) Object 주위의 래퍼 입니다.
함께 Maybe
우리는 하나 정확히 같은 몇 가지 값을 가질 수 있습니다 Single
또는 반환 아무것도 -처럼 Completable
. 또한 두 가지 모두와 마찬가지로 오류가 있습니다. 값이 없을 수도 있고 완료 될 수도
Maybe
있음을 표시하고 싶을 때 유용 Observable
합니다.
예는 캐시에서 가져 오지만 캐시에 반드시 값이있는 것은 아니므로이 경우 완료 onNext
하고 캐시에서 값을 가져옵니다 .
이것은 또한 RxJava2로 스트림에서 널이 아닌 값을 처리 할 가치가 있습니다.
RxJava2 Flowable
:
먼저 배압을 정의하겠습니다. 배압은 데이터가 처리 될 수있는 것보다 빠르게 생성되는 상황을 처리하는 수단입니다. Flowable
하류에서 항목을 요청할 수 있도록 배압 지원이 있습니다. 여기 에서 차이점에 대해 자세히 알아볼 수 있습니다 .
- Flowable 및 Observable 은 유한 또는 무한 스트림을 나타낼 수 있습니다. Flowable 지원 배압 .
- 단일 은 단일 요소가있는 스트림입니다.
- 어쩌면 0 또는 하나의 요소 스트림입니다.
- 마지막으로 Completable 은 요소가없는 스트림을 나타냅니다. 즉, 값없이 완료되거나 실패 할 수 있습니다.
간결한 대답은 내가 발견 여기 RXJava 섹션에.
'IT story' 카테고리의 다른 글
이름에 점이 포함 된 경우 JSON 개체 값을 얻는 방법은 무엇입니까? (0) | 2020.09.06 |
---|---|
Swift의 상태 표시 줄 높이 (0) | 2020.09.06 |
NSOperationQueue가 모든 작업을 완료하면 알림 받기 (0) | 2020.09.06 |
.NET에는 List a에 List b의 모든 항목이 포함되어 있는지 확인할 수있는 방법이 있습니까? (0) | 2020.09.06 |
Ruby 스크립트 내에서 명령 줄 명령 실행 (0) | 2020.09.06 |