flatMap
ReactiveX:
transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable
将一个可观察序列中的所有元素映射成为另一个可观察序列。
Observable<Int>.of(1, 2, 3)
.flatMap { Observable<String>.just(">>" + "\($0)") }
.subscribe(onNext: { element in
print("element:", element)
})
.disposed(by: bag)
输出:
element: >>1
element: >>2
element: >>3
如何使用flatMap解决回调地狱
func getOne(_ initialState: Int) -> Maybe<Int> {
return Maybe<Int>.create(subscribe: { mb in
mb(.success(initialState))
mb(.completed)
return Disposables.create()
})
}
func getTwo(_ one: Int) -> Maybe<Int> {
return Maybe<Int>.create(subscribe: { mb in
mb(.success(one+1))
mb(.completed)
return Disposables.create()
})
}
func getThree(_ two: Int) -> Maybe<Int> {
return Maybe<Int>.create(subscribe: { mb in
mb(.success(two+1))
mb(.completed)
return Disposables.create()
})
}
func getResult(_ three: Int) -> Maybe<Int> {
return Maybe<Int>.create(subscribe: { mb in
mb(.success(three+1))
mb(.completed)
return Disposables.create()
})
}
getOne(1)
.flatMap { self.getTwo($0) }
.flatMap { self.getThree($0) }
.flatMap { self.getResult($0) }
.map { $0 }
.subscribe(onSuccess: { result in
print("result: ", result)
})
.disposed(by: bag)
输出:
result: 4