我阅读了一些帖子,说处理RxSwift的最佳实践是仅将致命错误传递给onError并将结果传递给onNext。这对我很有意义,直到我意识到我不能再处理重试了,因为它只会在onError发生时才会发生。
我如何处理这个问题?
另一个问题是,如何混合处理全局和本地重试?
一个例子是iOS收据验证流程。
1.尝试从本地获取收据
2. 如果失败,请向Apple服务器请求最新收据。
3.将收据发送到我们的后端进行验证。
4.如果成功,则整个流程完成
5.如果失败,请检查错误代码是否可以重试,然后返回1。
在新的1中,它将强制从apple服务器请求新的收据。当再次到达5时,整个流程将停止,因为这已经是第二次尝试了。意味着只重试一次。
所以,在这个例子中,如果不使用rx并且使用状态机,则会使用状态机并共享一些全局状态,例如
我如何在rx中设计此流程? 带有这些在流程中设计的全局共享状态。
我如何处理这个问题?
另一个问题是,如何混合处理全局和本地重试?
一个例子是iOS收据验证流程。
1.尝试从本地获取收据
2. 如果失败,请向Apple服务器请求最新收据。
3.将收据发送到我们的后端进行验证。
4.如果成功,则整个流程完成
5.如果失败,请检查错误代码是否可以重试,然后返回1。
在新的1中,它将强制从apple服务器请求新的收据。当再次到达5时,整个流程将停止,因为这已经是第二次尝试了。意味着只重试一次。
所以,在这个例子中,如果不使用rx并且使用状态机,则会使用状态机并共享一些全局状态,例如
isSecondAttempt: Bool
,shouldForceFetchReceipt: Bool
等。我如何在rx中设计此流程? 带有这些在流程中设计的全局共享状态。
result/materialize
还是onError
。参考:http://adamborek.com/how-to-handle-errors-in-rxswift/此外,使用materialise
也有助于解决这个问题:https://dev59.com/61QK5IYBdhLWcg3wHsVJ你对这些有什么想法? - Tony Linmaterialize()
。但对于这个链条,错误是正确的解决方案。如果更大的链条不想中止,则我可能会通过.flatMap { getReceiptResonse().materialize() }
在更大的链条中使用此链条。 - Daniel T.