我有一个返回当前页面项目的端点。另外,如果要获取下一页的项目,则必须使用下一页的哈希值构造一个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
获取哈希值并返回一个可观察到的内容,该内容将发出请求订阅页面时使用。
您可能希望使用scan或reduce来收集所有元素,以将所有页面作为单个数组发出。