我在RxSwift中很新,我有以下问题。
有两个功能:
struct Checkout { ... }
func getSessionIdOperation() -> Single<UUID>
func getCheckoutForSession(_ sessionId: UUID, asGuestUser: Bool) -> Single<Checkout>
我有第三个功能,结合了两者的结果:
func getCheckout(asGuestUser: Bool) -> Single<Checkout> {
return getSessionIdOperation()
.map { ($0, asGuestUser) }
.flatMap(getCheckoutForSession)
}
getSessionIdOperation
和getCheckoutForSession
都可能失败,如果失败,我想重启整个链一次。我尝试retry(2)
,但只重复了getCheckoutForSession
。 :(
答案 0 :(得分:0)
确保您retry(2)
正在flatMap
上直播
func getCheckout(asGuestUser: Bool) -> Single<Checkout> {
return getSessionIdOperation()
// .retry(2) will retry just first stream
.map { ($0, asGuestUser) }
.flatMap(getCheckoutForSession)
.retry(2) // Here it will retry whole stream
}
万一getSessionIdOperation
失败,getCheckoutForSession
永远不会被调用,因为它基于第一流的输出。