2017-05-21 162 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 –