2017-05-15 11 views
0

誰もがこれを手伝ってくれますか? getUserDetailsApiで、私はそれがユーザーの詳細情報を取得したり、何かが間違っていたとgetScoreApiをスキップするために失敗したときにエラーを呼び出したい、RxSwift:観測可能なチェーンにエラーを投げる方法

getUserDetailsApi().flatMap(){users in 
    return getScoreApi(users[0]) 
}.subscribe(
    onCompleted: { 
     print("Done") 
    }, 
    onError: { 
     // which of the two APIs get an error? 
    }) 

私はここで2つのAPIを呼び出す:私はこの小さなコードを持っています。ユーザーのスコアを取得できない場合はgetScoreApiと同じですが、別のエラーが発生します。

私はflatMap()で上記のエラーを投げることができる方法はありますか?。 2つのオブザーバブルは順番に実行しなければならず、これらのエラーは異なるメッセージを持っていることに注意してください。

+0

使用Aあなたは条件が満たされた場合は、エラーをスローすることができない場合はflatMap中の文は、確認するかのような: '.flatMap {条件は、{$ 0を返した場合}他{スローエラー}}' – AamirR

答えて

1

getUserDetailsApi()getScoreApi()にエラーを投げてください。

例:getScoreApi()ため

func getUserDetailsApi() -> Observable<[User]> { 
    return Observable.create { observer in 

     // Your api call 
     // ... 
     // Probably you get the users array or an error. 

     if (error) { 
      observer.onError(YourError.UserDetailsError) // <- Your error 
     } else { 
      observer.onNext(users) 
      observer.onCompleted() 
     } 

     return Disposables.create { 
      // your dispose 
     } 
    } 
} 

と同じ。その後、いずれかが失敗すると、flatMapは失敗します。

getUserDetailsApi().flatMap(){users in 
    return getScoreApi(users[0]) 
}.subscribe(
    onCompleted: { 
     print("Done") 
    }, 
    onError: { 
     switch error{ 
     case .userDetailsError: 
      // ... 
     case .otherError: 
      // ... 
     } 
    }) 
関連する問題