您将需要使用该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是一个返回 Observable 的函数,其中包含 loa3 身份验证所需的数据。
当然,上面是伪代码,但我希望它能让你很好地了解如何解决这个问题。