swift - 结合 2 个 PublishSubject 并使用 Observable.combineLatest 发射
问题描述
我的服务中有 2 个单独的数据集合。
Featured
和Standard
内容。
我有 2 个 api 调用来返回这些项目。它们可以单独使用,但是当我想获取两组数据,根据条件提供一些丰富然后将它们返回给消费者时,我也有用例。
我希望我能做这样的事情:
class ContentService: ContentServiceType {
let featured = PublishSubject<[Content]>()
let standard = PublishSubject<[Content]>()
let content: Observable<(featured: [Content], standard: [Content])>
private let client: Client<ContentAPI>
private let disposeBag = DisposeBag()
init(client: Client<ContentAPI>) {
self.client = client
content = Observable
.combineLatest(featured, standard)
.map { (featured, standard) -> (featured: [Content], standard: [Content]) in
/*
Do some enrichment and create then return new, updated versions
*/
return (featured: updatedFeatured, standard: updatedStandard)
}.share()
}
func fetchStandardContent(page: Int = 0, size: Int = 100) -> Single<Void> {
let params = ["page": page, "size": size]
let request: Single<Content> = client.request(.getStandardContent(params))
return request.map { [unowned self] launchers in
self.standard.onNext(content.props)
return ()
}
}
func fetchFeaturedContent(page: Int = 0, size: Int = 100) -> Single<Void> {
let params = ["page": page, "size": size]
let request: Single<Content> = client.request(.getFeaturedContent(params))
return request.map { [unowned self] content in
self.featured.onNext(content.props)
return ()
}
}
}
在我的应用程序的其他地方,我希望我能做类似的事情
contentSvc.content
.observeOn(MainScheduler.instance)
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.subscribe(onNext: { content in
/* do something w/ content */
}).disposed(by: disposeBag)
然后无论何时调用contentSvc.fetchFeaturedContent
or ,上面的订阅者都会获取新数据。contentSvc.fetchStandardContent
contentSvc.content
相反content
,它似乎没有发出任何值。
解决方案
combineLatest
我相信它需要两个来源都发射,然后它才会自行发射。
我可能会考虑使用BehaviorSubject
orBehaviorRelay
代替 PublishSubject。
推荐阅读
- sql - SQL查询从每个月的最后一周获取4年的记录
- django - 如何在 django 的多客户端应用程序中构建基于角色的权限访问?
- java - 如何在 Tomcat 中使一个类对 Spring 可用?
- algorithm - 部分洪水填充
- r - 在 data.table 中按行获取总和
- node.js - Socket.io 命名空间和房间:无法在带有令牌的特定 url 上接收事件
- javascript - React-native:如何根据在前一个屏幕上选择的数字呈现输入并能够存储输入
- mongoose - 猫鼬中的自定义距离功能
- xamarin - 基于xamarin android中另一个下拉列表的动态下拉列表
- microsoft-translator - 您能解释一下如何计算基线和自定义 BLEU 分数吗?