【发布时间】:2021-05-08 01:44:42
【问题描述】:
我有两个独立的 observables。当它们都完成并且它们每个都提供了一个数组时,我需要执行一些操作。
let myObj1Array = myObj1Manager.getMyObj1List()//returns Observable<[MyObj1]>
let myObj2Array = myObj2Manager.getMyObj2List()//returns Observable<[MyObj2]>
现在我需要比较 myObj1Array 和 myObj2Array 的值,并在此基础上使用两个数组中的值创建另一个数组。我知道如何订阅 1 个变量,但不确定如何观察两个不同数组的完成情况。
编辑: 我也尝试过以下操作,但我只从第一个数组中获取值:
let myObj1Array = myObj1Manager.getMyObj1List()
let myObj2Array = myObj1Array.flatMap { _ in myObj2Manager.getMyObj2List() }
Observable.combineLatest(myObj1Array, myObj2Array)
.subscribe(onNext: { (sss, sds) in
print(sss)
})
.addDisposableTo(disposeBag)
我实际上对如何处理这种情况一无所知。
编辑2: 获取第一个数组中的 observables 的函数:
func getMyObj1List() -> Observable<[MyObj1]> {
return Observable.create { observer -> Disposable in
self.specialsRest.getMyObj1List { response, error in
if let error = error {
observer.onError(Exception(error))
return
}
guard let saleItems = MyObj1.decode(data: response?.data) else {
observer.onError(Exception("Could not decode specials!"))
return
}
queueBackground.async {
observer.onNext(saleItems)
observer.onCompleted()
}
}
return Disposables.create { self.specialsRest.cancel() }
}
}
【问题讨论】:
-
你能说明一下代码,你 1) 设置你的 observables(它看起来像你的第一个块,但看起来它正在返回一些东西)和 2) 你从观察中获取数据的位置?
let myObj1Array = myObj1Manager.getMyObj1List()这是设置观察还是取回数据?我想我看不到您在哪里异步获取数据,即当使用数据调用观察者时。