concatMap

将 Observable 的元素转换成其他的 Observable,然后将这些 Observables 串连起来

concatMap - 图1

concatMap 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。然后让这些 Observables 按顺序的发出元素,当前一个 Observable 元素发送完毕后,后一个 Observable 才可以开始发出元素。等待前一个 Observable 产生完成事件后,才对后一个 Observable 进行订阅。


演示

1. let disposeBag = DisposeBag()

3. let subject1 = BehaviorSubject(value: "?")
4. let subject2 = BehaviorSubject(value: "?")

6. let variable = Variable(subject1)

8. variable.asObservable()
9. .concatMap { $0 }
10. .subscribe { print($0) }
11. .disposed(by: disposeBag)

13. subject1.onNext("?")
14. subject1.onNext("?")

16. variable.value = subject2

18. subject2.onNext("I would be ignored")
19. subject2.onNext("?")

21. subject1.onCompleted()

23. subject2.onNext("?")

输出结果:

1. next(?)
2. next(?)
3. next(?)
4. next(?)
5. next(?)