Ich habe folgenden Code:RxSwift verfolgt mehr Observablen Aktivität
let categoriesRequest = APIService.MappableRequest(Category.self, resource: .categories)
let categoriesRequestResult = api.subscribeArrayRequest(categoriesRequest, from: actionRequest, disposedBy: disposeBag)
let newCategories = categoriesRequestResult
.map { $0.element }
.filterNil()
let categoriesUpdateData = DatabaseService.UpdateData(newObjectsObservable: newCategories)
let categoriesDatabaseResult = database.subscribeUpdates(from: categoriesUpdateData, disposedBy: disposeBag)
let latestTopicsRequest = APIService.MappableRequest(Topic.self, resource: .latestTopics)
let latestTopicsRequestResult = api.subscribeArrayRequest(latestTopicsRequest, from: actionRequest, disposedBy: disposeBag)
let newLastTopics = latestTopicsRequestResult
.map { $0.element }
.filterNil()
let latestTopicsUpdateData = DatabaseService.UpdateData(newObjectsObservable: newLastTopics)
let latestTopicsDatabaseResult = database.subscribeUpdates(from: latestTopicsUpdateData, disposedBy: disposeBag)
Es gibt zwei Anforderungen, die aus dem gleichen beginnt Gegenstand nach diesen Anfragen actionRequest
und zwei Datenbank-Updates veröffentlichen.
Ich brauche etwas wie isActive
, bool Wert, der true
zurückgibt, wenn eine der API/Datenbank-Task in Bearbeitung ist. Ist es möglich? Ich sah ActivityIndicator in RxSwift Beispiele, aber ich weiß nicht, ist es möglich, es in meinem Fall zu verwenden.
-Code von api/Datenbank bei Bedarf:
// API
func subscribeArrayRequest<T>(_ request: MappableRequest<T>,
from triggerObservable: Observable<Void>,
disposedBy disposeBag: DisposeBag) -> Observable<Event<[T]>> {
let result = ReplaySubject<Event<[T]>>.create(bufferSize: 1)
triggerObservable
.flatMapLatest {
SessionManager
.jsonArrayObservable(with: request.urlRequest, isSecured: request.isSecured)
.mapResponse(on: APIService.mappingSheduler) { Mapper<T>().mapArray(JSONArray: $0) }
.materialize()
}
.subscribe(onNext: { [weak result] event in
result?.onNext(event)
})
.disposed(by: disposeBag)
return result
}
// Database
func subscribeUpdates<N, P>(from data: UpdateData<N, P>, disposedBy disposeBag: DisposeBag) -> Observable<Void> {
let result = PublishSubject<Void>()
data.newObjectsObservable
.observeOn(DatabaseService.writingSheduler)
.subscribe(onNext: { [weak result] newObjects in
// update db
DispatchQueue.main.async {
result?.onNext(())
}
})
.disposed(by: disposeBag)
return result
}
Dank.