我有两个observable,第一个检查AccessToken是否存在,如果没有返回NotLoggedIn
错误类型。第二个提取用户数据,如果rx_validate
中存在AccessToken,则应调用该数据。但是,我似乎无法弄清楚如何将这些可观察对象与响应中的错误句柄rx_fetchUserData
错误结合起来。
错误枚举
enum LoginError: Error {
case NotLoggedIn
case Unknown
case NoConnection
}
viewModel中的observable
// MARK: validate if user is logged in
public func rx_validate() -> Observable<String> {
return Observable.create({ observer in
//Check if AccessToken exist
if let token = AccessToken.current {
observer.onNext(token.authenticationToken)
observer.onCompleted()
} else {
observer.onError(LoginError.NotLoggedIn)
}
return Disposables.create()
})
}
// MARK: Fetch data
public func rx_fetchUserData(token: String) -> Observable<User> {
return Network.provider
.request(.auth(fbToken: token))
.retry(1).debug()
.mapObject(User.self)
}
答案 0 :(得分:4)
您应该使用flatMap
:
rx_validate()
.flatMap { token in
return rx_fetchUserData(token: token)
}
.subscribe(onNext: { user in
// do something with the user
},
onError: { error in
// manage errors
})