После некоторой цепочки flatMap я хочу использовать весь предыдущий результат в конце, предположим, у меня есть следующий код:
func getObservable1() -> Observable<API1Response> {
...
}
func getObservable2(param: API1Response) -> Observable<API2Response> {
...
}
func getObservable3(param: API2Response) -> Observable<API3Response> {
...
}
getObservable1()
.flatMap { api1Response in
return getObservable2(api1Response)
}
.flatMap { api2Response in
return getObservable3(api2Response)
}
.subscribe(onNext: { api3Response in
// I want to use both of api1Response and api2Response here
})
Как я могу это сделать?
Должен ли я сохранить ответ API на переменную области видимости, а затем использовать ее последнюю?
Что-то типа:
var api1Response: API1Response?
func getObservable1() -> Observable<API1Response> {
...
self.api1Response = api1Response
...
}
...
getObservable1()
...
.subscribe(onNext: { api3Response in
// use ap1Response here
print(self.api1Response)
})
Спасибо!
-----ОБНОВИТЬ-----
Основываясь на ответе @Misternewb, я публикую исполняемый код для тестирования.
func getObservable1() -> Observable<Int> {
return Observable.of(1)
}
func getObservable2(num: Int) -> Observable<Int> {
return Observable.of(num + 1)
}
func getObservable3(num: Int) -> Observable<Int> {
return Observable.of(num + 10)
}
getObservable1()
.flatMap { ret1 in
return getObservable2(num: ret1).map { (ret1, $0) }
}
.flatMap { ret1, ret2 in
return getObservable3(num: ret2).map { (ret1, ret2, $0) }
}
.subscribe(onNext: { ret1, ret2, ret3 in
print(ret1)
print(ret2)
print(ret3)
})
Выход
1
2
12