swift - RXSwift 用户输入错误和继续

标签 swift rx-swift

我是 RX 的新手,我正在尝试了解如何在需要用户输入的错误后继续执行任务。

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

有很多登录示例,但我无法全神贯注于继续链,这需要用户输入。

有什么想法吗?谢谢:)

最佳答案

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

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

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

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

let credentials = credentialInput.sample(loginButton.rx_tap)

然后获取token。

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

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

当然,以上是伪代码,但我希望它能让您对如何解决问题有一个很好的了解。

关于swift - RXSwift 用户输入错误和继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841054/

相关文章:

ios - 当 Realm 上的对象失效时该怎么办

swift - 如何在 Linux 上使用 Foundation 的 URLRequest 类型?

swift - 如何在不拉伸(stretch)原始图像的情况下扩展 CIImage 的空间(边界)?

iOS Rxswift 处理 CancelButton 在 searchBar 中点击

ios - RxSwift Textfield debounce subscribe 没有调用

rx-swift - Completable 的 RxSwift 缓存运算符

ios - 循环视频 KUDAN AR

ios - 根据 iOS (Swift 2) 中的消息 ID 将传入的网络消息分派(dispatch)到特定线程

swift - RxSwift URLSession 请求已处理

swift - 如何使用 RxSwift 将一个错误映射到另一个错误