美文网首页
操作符(多个Observable)

操作符(多个Observable)

作者: fanren | 来源:发表于2020-07-05 17:06 被阅读0次

一、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")

相关文章

网友评论

      本文标题:操作符(多个Observable)

      本文链接:https://www.haomeiwen.com/subject/fsivqktx.html