Alamofire嵌套请求

我需要对同一个API做三个不同的请求。 这些电话都不依赖于其他。 我目前有我的请求嵌套像这样:

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() } } } } } } } 

我觉得这可能不是一个好的方法,并且正在寻找一些更好的方法来解决这个问题。 目前,由此产生的arrays似乎正确填充我的表格视图,但我不禁觉得这种嵌套的方法是不正确的。

如果你的操作都不依赖,那么你为什么要嵌套它们? 我看到你不会重载你的UITableView,直到第三个完成 – 如果这是一个困难的要求,那么他们依赖的。

当他们依赖时,这种嵌套有时被称为“末日金字塔”。 清理它的一个好方法是将嵌套的代码作为monad包装,这将允许以下内容:

  • 代码可以整齐链接,而不是嵌套,提高可读性。
  • 您可以使用单一而不是重复的error handling
  • 任何最终/总是任务可以整齐地expression。

这就是所谓的承诺。 这里有一个关于他们如何工作的优秀教程。

还有一些很棒的图书馆。 PromiseKit是一个受欢迎的。