2016-12-15 13 views
1

私はSwiftと一緒にJWTトークンとAlamofireで作業しています。私の問題は、リクエストがnilを返すときに、私はrequestTestメソッドがrefreshToken()メソッドを実行し、HTTPリクエストを再試行することです。私のコードはこのように見えます。私は自分自身を実行しようとしましたが、成功しませんでした。 :(補完ハンドラ内の補完ハンドラ?

// Internal method used for the HTTP methods 
private func request<A>(resource: Resource<A>, method: Alamofire.HTTPMethod, parameters: [String:String], completion: @escaping (A?) ->()) { 

let requestUrl = self.baseurl.absoluteString + resource.url.absoluteString + "?token=" + self.loginManager.getFromKeychain().token! 

    Alamofire.request(requestUrl, method: method, parameters: parameters).response { response in 

     // Check if response need reauth 
     if(response.response?.statusCode == 401 || response.response?.statusCode == 400) { 

      self.refreshToken(completion: { result in 

       if(result) { 
        print("Token got refreshed") 

        // How do i make the request again? 

       } 

      }) 

     } 

     guard let data = response.data else { 
      completion(nil) 
      return 
     } 

     completion(resource.parse(data as NSData)) 

    } 

} 
+0

あなたはあなたの主なメソッドの完了ハンドラに多くのパラメータを追加することができ呼ばもう一度リクエストを作成しますあなたの401のステータスコード – guiltance

+0

私に例を教えてもらえますか? –

答えて

1

あなたの方法は次のようになります。あなたが取得するとき

private func request<A>(resource: Resource<A>, method: Alamofire.HTTPMethod, parameters: [String:String], completion: @escaping (A?, error: Int?) ->()) { 

    let requestUrl = self.baseurl.absoluteString + resource.url.absoluteString + "?token=" + self.loginManager.getFromKeychain().token! 

    Alamofire.request(requestUrl, method: method, parameters: parameters).response { response in 

     // Check if response need reauth 
     if(response.response?.statusCode == 401 || response.response?.statusCode == 400) { 
      completion(nil, response.response?.statusCode) 
     } 

     guard let data = response.data else { 
      completion(nil, nil) 
      return 
     } 

     completion(resource.parse(data as NSData, nil) 

    } 
} 

そして、あなたの方法は

func myMethod(resource: Resource<A>, method: Alamofire.HTTPMethod, parameters: [String:String]) { 
    self.request(resource: resource, method: method, parameters: parameters) { (result, errorCode) in 
    if let errorCode = errorCode { 
     self.refreshToken(completion: { res in 
      if(res) { 
       print("Token got refreshed") 

       // How do i make the request again? 
       self.myMethod(resource: resource, method: method, parameters: parameters) 
      } 
     }) 
    } 
    else if let result = result { 
     //ok got a result 
    } 
} 
+0

助けてくれてありがとう! –

関連する問題