2017-10-28 5 views
0

各リクエストを処理したい場合、リクエストのレスポンスが条件と一致しない場合は、新しいリクエストを開始してレスポンスを取得します。どのように私はここに古い要求moya、rxswiftでネットリクエストを再開する方法

を再起動することができますことは、私のコードは今

static func request(target: API) -> Observable<Response> { 
     let actualRequest = provider.request(target) 
     return self.provider.request(target).flatMapLatest { (response) -> Observable<Response> in 
      let responseModel = ResponseModel(data:response.data) 

      if responseModel.code == -405 { 
       let refreshToken = User.shared?.refreshToken 
       self.provider.request(.refreshToken(refresh: refreshToken!)).flatMap({ response -> Observable<String> in 
        return Observable.just("") 

       }).shareReplay(1).subscribe(onNext: { refreshToken in 
        // here I get a new token, how to retry the actualRequest , or how to start a new network request with the target 
       }, onError: { (error) in 

       },onCompleted: { _ in 

       }) 

      } 

       return Observable.just(response) 
     } 
    } 
+0

ここに記載されているように、* .switchLatest()*を使用してみてください - https://stackoverflow.com/a/47040856/856588 –

答えて

0

あなたは、MoyaProviderをサブクラス化リクエストメソッドをオーバーライドして、そこには、APIからの応答を確認し、必要に応じて再試行することができなければなりません。

関連する問題