【发布时间】: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