美文网首页
操作符(多个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