RXSwift 用户输入错误和继续

Posted

技术标签:

【中文标题】RXSwift 用户输入错误和继续【英文标题】:RXSwift User input on error and continuation 【发布时间】:2016-03-07 10:16:24 【问题描述】:

我对 RX 很陌生,我正在尝试了解如何在出现需要用户输入的错误后继续执行任务。

一个具体的例子是两因素身份验证。我们有一个身份验证服务和一个受保护的资源。登录后,我们从 auth-service 收到一个 LOA-2(使用的用户名和密码)令牌。尝试从受保护的资源中获取数据时,我们收到一条错误消息,指出我们需要 LOA-3(双因素)。因此,我们必须从用户那里获取输入,将其发送到身份验证服务,获取新令牌(LOA-3)并使用新令牌重试我们的 fetch 调用。

有很多关于登录的示例,但我无法继续使用需要用户输入的链。

有什么想法吗?谢谢:)

【问题讨论】:

【参考方案1】:

您将需要使用 catchError 函数从错误中恢复并启动一个新的 observable 来启动替代行为。

因此,例如,您需要一个获取用户名和密码的生产者...

let credentialInput = Observable.combineLatest(usernameLabel.rx_text, passwordLabel.rx_text)

您可能希望等到用户点击“登录”按钮...

let credentials = credentialInput.sample(loginButton.rx_tap)

然后获取令牌。

let loaToken = credentials.flatMap  serverLogin($0, $1) .catchError  error in 
    if error == loa3Error 
        return getLOA3Data().flatMap  loa3ServerLogin($0) 
    
    else 
        throw error
    

getLOA3Data 是一个函数,它返回一个包含 loa3 身份验证所需数据的 Observable。

当然,上面是伪代码,但我希望它能让你很好地了解如何解决这个问题。

【讨论】:

以上是关于RXSwift 用户输入错误和继续的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 错误处理订阅

RxSwift:立即交付第一个项目,消除后续项目

BUGKU login3(SKCTF)

根据 UITextField 中的值禁用按钮只能工作一次(RxSwift)

疑难杂症,逐个下药

带有 UiTextField 的 RxSwift