Alamofire嵌套请求

时间:2017-05-21 00:20:54

标签: ios swift 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()
                        }
                    }
                }
            }
        }
    }
}

我觉得这可能不是一个好方法,我正在寻找一些指导,以便更好地解决这个问题。目前,生成的数组似乎正确填充了我的表视图,但我无法提供帮助,但感觉这种嵌套方法不正确。

1 个答案:

答案 0 :(得分:2)

如果您的操作都不依赖,那么为什么要嵌套它们呢?我发现你不会重新加载你的UITableView,直到第三个完成 - 如果这是一个硬性要求,那么它们依赖于

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

  • 代码可以整齐地链接,而不是嵌套,从而提高可读性。
  • 您可以使用单一而非重复的错误处理
  • 任何最终/总是任务都可以整齐地表达出来。

这称为承诺。这是一个很棒的tutorial on how they work.

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