我在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)
}


getSessionIdOperationgetCheckoutForSession都可能失败,并且在失败的情况下,我只想重新启动整个链一次。我尝试了retry(2),但是只重复了getCheckoutForSession。 :(

最佳答案

确保您通过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将永远不会被调用,因为它基于第一个流的输出。

关于swift - RxSwift重试完整链,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50843542/

10-11 01:30