Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RXSwift用户输入错误和继续_Swift_Rx Swift - Fatal编程技术网

RXSwift用户输入错误和继续

RXSwift用户输入错误和继续,swift,rx-swift,Swift,Rx Swift,我是RX的新手,我正在尝试理解在出现需要用户输入的错误后,如何继续执行任务 一个具体的例子是双因素身份验证。。我们有一个身份验证服务和一个受保护的资源。登录后,我们将从身份验证服务接收LOA-2(使用的用户名和密码)令牌。尝试从受保护的资源获取数据时,我们收到一个错误,说明我们需要LOA-3(双因素)。因此,我们必须从用户那里获取输入,将其发送到auth服务,获取一个新令牌(LOA-3),然后使用新令牌重试我们的获取调用 登录的例子有很多,但我不能对需要用户输入的链进行概括 有什么想法吗?谢谢:

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

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

登录的例子有很多,但我不能对需要用户输入的链进行概括


有什么想法吗?谢谢:)

您需要使用
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身份验证所需数据的可观察值


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

您需要使用
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身份验证所需数据的可观察值

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