【发布时间】:2018-02-17 02:53:33
【问题描述】:
所以,我有一个复杂的数据要获取,其中涉及 4 个请求,每个请求取决于最后一个的结果,然后其中一些返回一个列表,因此对于该列表中的每个元素,我必须获取一些信息.
上下文
我正在使用 YouTube API,我必须获取的数据是用户订阅频道发送的最新视频列表。
以下是执行此操作所需的请求:
GET /subscriptions/list [1]
GET /channels/list [2]
GET /playlistItems/list [3]
获取 /videos [4]
[1]:返回用户订阅频道的列表。返回大小配置为5,所以我必须重复这个请求,直到所有订阅的频道都被获取
[2]:返回特定频道的已发送视频播放列表的 id
[3]:返回特定频道的最后 n 个视频
[4]:返回特定视频的信息
第一次尝试
一开始我是通过同步的方式获取数据,也就是执行request[1],直到所有channel都获取完毕。然后,我遍历频道列表,并为每个频道执行请求 [2] 以获取播放列表的 id。然后请求 [3] 获取 n 个视频,对于每个视频,通过请求 [4] 获取其信息。
问题
问题在于将视频返回给用户需要很长时间,所以我想到了并行执行请求。问题是我需要知道所有请求何时完成运行,以便按日期重新排序视频列表。为了做到这一点,我的代码变成了 DispatchGroup 的乱七八糟的乱七八糟的东西。
所以,简而言之,什么是处理这样的问题的最佳方法,我有各种相互依赖的请求,我想执行其中一些并行(第二个 - 我必须为每个通道执行)并且需要知道何时完成。
【问题讨论】:
-
显示你到目前为止所做的事情。
标签: swift concurrency nsurlsession