728x90
반응형
Conditional Operator
amb
여러 옵저버블 중에서 가장 먼저 이벤트를 방출하는 옵저버블을 선택하는 것
right 옵저버블이 left 옵저버블보다 먼저 방출됐기 때문에
left 옵저버블은 무시되고, rigth 옵저버블만 구독된다.
많은 서버 연결 시도 중 가장 먼저 응답을 준 서버와 통신하고 싶은 경우 사용한다.
let bag = DisposeBag()
enum MyError: Error {
case error
}
let a = PublishSubject<String>()
let b = PublishSubject<String>()
let c = PublishSubject<String>()
// 소스 옵저버블이 2개로 제한될 경우
a.amb(b)
.subscribe { print($0) }
.disposed(by: bag)
a.onNext("A") // a가 먼저 이벤트를 방출해서 b는 무시됐음
b.onNext("B")
//next(A)
b.onCompleted() // b는 무시
a.onCompleted() // a가 전달하는 이벤트는 구독자에게 바로 전달
//completed
// 3개 이상의 옵저버블을 전달할 경우 사용 - 모든 소스 옵저버블을 배열 형태로 전달
Observable.amb([a, b, c])
.subscribe { print($0) }
.disposed(by: bag)
728x90
반응형
'⭐️ 개발 > Rx' 카테고리의 다른 글
[Rx] Sharing Operator (0) | 2023.03.22 |
---|---|
[Rx] Time Based Operator (0) | 2023.03.20 |
[Rx] Filtering Operator (0) | 2023.03.18 |
[Rx] Create Operators (0) | 2023.03.17 |
[Rx Operator 시리즈] 4. flatMap / flatMapFirst / flatMapLatest (0) | 2023.01.19 |