【问题标题】:RxSwift: Completing observable sequence of unknown lengthRxSwift:完成未知长度的可观察序列
【发布时间】:2017-12-10 21:36:49
【问题描述】:

问题

我正在尝试在使用之前加载我的应用程序需要的所有数据。获得所有数据后,我想在控制器中将一个事件发送回我的订阅,状态为成功或失败。

我正在努力想出一种在我的可观察链上发送 onComplete 状态的方法,以便我可以使用toArray()。也许有一种方法,或者只是一种我没有想到的更好的方法。

加载工作流

基本上我有三种不同的服务:版本、冠军和皮肤。

我检索了最新版本并获得了该版本的所有冠军。然后我下载英雄拥有的每种皮肤的所有图像。

可观察链

我的 LoadingViewModel 中的可观察链是这样的:

return versionService.getLatest().flatMap({ (version: VersionData) in
    return championService.getChampions(forVersion: version)
}).flatMap({ (champions: [Champion]) -> Observable<Champion> in
    // Go through champions and update total skin count
    // emit each champion
}).flatMap({ (champion: Champion) -> Observable<Skin> in
    return skinService.getSkin(forChampion: champion)
}).toArray() // Doesn't work since I don't send complete
.flatMap({ (result: [Skin]) -> Observable<LoadingViewModelResult> in
    return Observable.just(LoadingViewModelResult.success)
})

如果我没有 toArray() ,那么我会为每个皮肤发出一个LoadingViewModelResult.success,这会使我的视图控制器充满大量不需要的成功结果。

我的尝试

我尝试使用.take(count) 传入皮肤计数,但由于它被初始化为 0,因此链将立即取 0 并返回。

【问题讨论】:

    标签: swift observable rx-swift


    【解决方案1】:

    对于我的[Champion] -&gt; Observable&lt;Champion&gt; 和Champion -&gt; Observable&lt;Skin&gt; observable,我需要在Observable 的创建中包含observer.onCompleted。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多