如何使用 RxSwift 实现递归分页网络调用



我有一个返回当前页面项目的端点。此外,如果您想获取下一页的项目,则必须使用下一页的哈希值构造一个 URL。此哈希在上一个请求的响应中作为属性返回。如您所知,我们需要递归网络调用。

请求完成后,将开始一个新请求,直到哈希通过响应返回 null。

然后,我需要将所有收集的数据绑定到一个数组中。

如何在 RxSwift 中构建类似的东西?如果您描述一下这个概念,我将不胜感激。

你需要这样的东西:https://gist.github.com/danielt1263/ec1032375498eb95aa260239b289d263

/**
Calls `producer` with `seed` then emits result and also passes it to `pred`. Will continue to call `producer` with new values as long as `pred` returns values.
- parameter seed: The starting value needed for the first producer call.
- parameter pred: This closure determines what the next value pass into producer should be or returns nil if no more calls are necessary.
- parameter producer: The function that produces the Single result.
- returns: An observable that emits each producer's value.
*/
func emitWhile<T, U>(seed: U, pred: @escaping (T) -> U?, producer: @escaping (U) -> Single<T>) -> Observable<T>

seed是第一页的哈希。pred获取网络请求的结果,提取下一页的哈希并返回它(如果没有下一页,则返回 nil(。producer采用哈希并返回一个可观察量,该可观察量将在订阅页面时发出对页面的请求。

您可能希望使用扫描或reduce收集所有元素,以将所有页面作为单个数组发出。

最新更新