2017-01-12 6 views
1

У меня есть две наблюдаемые первые проверки, существует ли AccessToken и если не возвращается тип ошибки NotLoggedIn. Второй выбирает данные пользователя и должен вызываться, если существует AccessToken в rx_validate. Однако я не могу понять, как я совмещаю эти наблюдаемые с ошибкой ошибки rx_fetchUserData ошибок из ответа.Ошибка обработки запросов с использованием RxSwift

Ошибка Enum

enum LoginError: Error { 
    case NotLoggedIn 
    case Unknown 
    case NoConnection 
} 

наблюдаемыми в ViewModel

// 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) 

} 

ответ

2

Вы должны использовать 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   
}) 
Смежные вопросы