2016-03-07 66 views
1

我对RX很新,我想了解如何在需要用户输入的错误之后继续执行任务。RXSwift用户输入错误和延续

一个具体的例子是双因素认证。我们有一个auth服务和一个受保护的资源。登录后,我们从auth-service接收到一个LOA-2(用户名为&密码)令牌。试图从受保护的资源中获取数据时,我们收到一个错误,指出我们需要LOA-3(双因素)。所以我们必须得到用户的输入,将它发送给auth-service,获得一个新的令牌(LOA-3),并用新的令牌重试我们的获取调用。

有很多登录的例子,但我无法围绕继续链,这需要用户输入。

任何想法?谢谢:)

回答

0

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

因此,例如,你需要一个制片人是可以获得用户名和密码...

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认证数据的功能。

以上是当然是伪代码,但我希望它会给你一个关于如何解决问题的好主意。