2016-09-18 16 views
1

RxSwiftストリームを処理するときにViewControllerレイヤでAPIコールを再試行する方法を理解しようとしています。私はにエラーをラップするか、ストリームErrorを返すことができることを理解しています。どちらの場合でも、ユーザーが操作を「再試行する」方法(アラートを立てた後など)はどうしてもわかりません。RxSwiftを使用しているときにViewControllerのAPIエラーを表示して復旧する方法

エラーをラップすると、APIレイヤに戻って再試行できますか?私がエラーをラップしない場合は、2つの質問があります: 1)retryをアラートに対するユーザーの応答で条件付きにするにはどうすればよいですか?2)ストリームを "再初期化する"ことはできますか?

私が思いついた唯一のことは、エラーのある "再試行対象"を戻し、ビューコントローラが再試行要求を示すことです。 APIストリームに関連することになる。しかし、それはひどく巻き込まれているようです。

もっと一般的には、ストリーム/オブザーバブルによるアプリケーションエラー処理の主題に関する参考文献への参照をお待ちしております。私は、RxSwiftのオブジェクトと演算子、そして "ハッピーパス"の状況をどのように処理するかについては十分に理解しているように感じますが、継続的に実行されているアプリケーションのコンテキストでエラーを堅牢に処理する方法はわかりません。このため

答えて

0

私のソリューションは、それらを再購読するので不要、このタイプ例えばResult<AnyObject,ErrorType>

、ユーザログインのシナリオ

// where API.login() takes the response data and try to map to JSON 
// then try to map into Result<JSON,ErrorType> 
let loginStream: Result<JSON,ErrorType> = loginTaps.flatMap { API.login() } 
                .shareReplay() 

let loginResponse = loginStream.filter { $0.value != nil }.map { $0.value } 
let loginError = loginStream.filter { $0.error != nil }.map { $0.error } 

ストリームが終了されることはありませんそれらをラップすることはありません。

関連する問題