操作符(多个Observable)
2020-07-05 本文已影响0人
fanren
一、merge
- 将多个Observable合并成一个
- 任意一个发出元素,他就发出元素
- 任意一个发出complete,此Observable就终止,不能再发出事件;当所有的Observable都发出complete事件,他才发出complete事件,并终止序列;
- 任意一个发出error,他就发出error,并终止序列
let bag = DisposeBag()
let sub1 = PublishSubject<String>()
let sub2 = PublishSubject<String>()
Observable.of(sub1, sub2).merge().subscribe(onNext: { (value) in
print(value)
}, onError: { (err) in
print(err)
}, onCompleted: {
print("success")
}).disposed(by: bag)
sub1.onNext("aa")
sub2.onNext("bb")
let error = NSError(domain: "", code: 1, userInfo: nil)
sub1.onError(error)
sub1.onCompleted()
sub1.onNext("cc")
sub2.onNext("dd")
sub2.onCompleted()
sub2.onNext("ee")
二、concat
- 将多个Observable串联成一个
- 按顺序发出元素
- 当第一个Observable发出complete后,第二个Observable才可以发出元素
- 当所有的Observable都发出complete事件,才能发出complete事件,并终止序列
- 任意一个发出error事件,他就发出error事件,并终止序列
let bag = DisposeBag()
let sub1 = PublishSubject<String>()
let sub2 = PublishSubject<String>()
Observable.of(sub1, sub2).concat().subscribe(onNext: { (value) in
print(value)
}, onError: { (err) in
print(err)
}, onCompleted: {
print("success")
}).disposed(by: bag)
sub1.onNext("aa")
sub1.onNext("bb")
sub2.onNext("cc")
sub1.onCompleted()
//let error = NSError(domain: "", code: 1, userInfo: nil)
//sub1.onError(error)
sub2.onNext("dd")
sub2.onCompleted()
sub2.onNext("ee")
三、zip
- 将多个Observable组合成一个
- 按照组合发出元素,每个Observable的第一个元素的组合,第二个元素的组合...以组合的方式发出元素
- 当所有的Observable都发出complete后,zip才发出complete,并终止序列
- 当所有的Observable都发出error后,zip才发出error,并终止序列
let bag = DisposeBag()
let sub1 = PublishSubject<String>()
let sub2 = PublishSubject<String>()
Observable.zip(sub1, sub2).subscribe(onNext: { (value) in
print(value)
}, onError: { (err) in
print(err)
}, onCompleted: {
print("success")
}).disposed(by: bag)
sub1.onNext("aa")
sub1.onNext("bb")
sub2.onNext("cc")
sub1.onCompleted()
let error = NSError(domain: "", code: 1, userInfo: nil)
sub1.onError(error)
sub2.onError(error)
sub2.onNext("dd")
sub2.onCompleted()
sub2.onNext("ee")
sub1.onNext("ff")
四、combineLatest
- 将多个Observable组合成一个
- 按照组合发出元素,任何一个Observable发出元素,combine会把所有Observable的最后两个元素组合并发出,前提是每个Observable都发出元素,否则就不能发出
- 任何一个Observable发出complete,之后就不能再发出元素;当所有的Observable都发出complete后,combine才发出complete并终止序列
- 当所有的Observable都发出error后,combine才发出error,并终止序列
let bag = DisposeBag()
let sub1 = PublishSubject<String>()
let sub2 = PublishSubject<String>()
Observable.combineLatest(sub1, sub2).subscribe(onNext: { (value) in
print(value)
}, onError: { (err) in
print(err)
}, onCompleted: {
print("success")
}).disposed(by: bag)
sub1.onNext("aa")
sub2.onNext("cc")
sub1.onNext("bb")
sub1.onCompleted()
sub1.onNext("mm")
//let error = NSError(domain: "", code: 1, userInfo: nil)
//sub1.onError(error)
//sub2.onError(error)
sub2.onNext("dd")
sub2.onNext("ee")
sub2.onCompleted()
sub1.onNext("ff")