2017-05-21 210 views
1

我需要對同一個API發出三個不同的請求。這些電話都不依賴於其他電話。我現在有嵌套我的請求,像這樣:Alamofire嵌套請求

API.getPopularMovies() { responseObject, error in 
     if let results = responseObject { 
      self.popularMovies = results 

      self.API.getNowPlayingMovies() { responseObject, error in 
       if let results = responseObject { 
        self.nowPlayingMovies = results 

        self.API.getUpcomingMovies() { responseObject, error in 
         if let results = responseObject { 
          self.upcomingMovies = results 

          self.movies = [self.popularMovies, self.nowPlayingMovies, self.upcomingMovies] 
          self.tableView.reloadData() 
         } 
        } 
       } 
      } 
     } 
    } 
} 

我覺得這可能不是一個好辦法,並正在尋找朝會對此有更好的方式了一些指導。目前,由此產生的數組似乎正確填充我的表格視圖,但我不禁覺得這種嵌套的方法是不正確的。

回答

0

如果您的操作都不依賴,那麼爲什麼要嵌套它們?我看到你不會重新加載你的UITableView直到第三個完成 - 如果這是一個困難的要求,那麼他們相關。

當他們依賴時,這種嵌套有時被稱爲'末日金字塔'。清理它的一個好方法是將嵌套代碼作爲monad包裝,這將允許以下內容:

  • 代碼可以整齊鏈接而不是嵌套,從而提高可讀性。
  • 您可以使用單一的而不是重複的錯誤處理
  • 任何最終/總是任務可以整齊地表達。

這被稱爲承諾。這裏有一個很好的tutorial on how they work.

還有一些很棒的圖書館。 PromiseKit是一個受歡迎的。

+0

你說得對 - 他們肯定是依賴的。我研究了您提供的鏈接,我認爲它們足以讓我走上正確的道路。謝謝賈斯珀! – Max

+0

不客氣,朋友。我使用了Ray Wenderlich的教程來開始。它附帶了一個具體的示例應用程序,儘管您必須註冊一個Flickr API密鑰才能使用它。 https://www.raywenderlich.com/145683/getting-started-promises-promisekit –