使用RxSwift处理请求时出错

时间:2017-01-12 18:17:55

标签: ios swift reactive-programming rx-swift

我有两个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)

}

1 个答案:

答案 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        
})