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

问题描述 投票:0回答:1

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

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

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

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

swift pagination rx-swift reactive
1个回答
0
投票

您需要这样的内容: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获取哈希值并返回一个可观察到的内容,该内容将发出请求订阅页面时使用。

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

© www.soinside.com 2019 - 2024. All rights reserved.