嗯,我对反应式编程非常陌生。问题是,我有一个返回对象的函数(A),现在我有另一个函数(B)订阅了从函数A返回的对象,我也使函数B也成为了该订阅中返回的另一个对象,现在整个返回这个是行不通的。我不知道为什么会这样。任何帮助,将不胜感激。谢谢功能A
func getClassById(classId: Int) -> Observable<AssignedClassModel> {
return Observable.create{[weak self] observer -> Disposable in Alamofire.request("URL", method:.get, parameters: nil, encoding: JSONEncoding.default, headers: self!.getRequestHeader())
.validate()
.responseJSON{ response in
switch response.result {
do {
let assingnedClass = try JSONDecoder().decode(AssignedClassModel.self, from: data)
observer.onNext(assingnedClass)
} catch {
observer.onError(error)
}
case .failure(let error):
observer.onError(error)
}
}
return Disposables.create()
}
}
功能B
func getAssignedClassData(classId: Int) -> Observable<[StudentModel]> {
return Observable.create{[weak self] observer -> Disposable in // from here code is not going further.
APIService.singelton
.getClassById(classId: classId)
.asObservable()
.subscribe(onNext: { [weak self] assingnedClass in
let studentsData = Array(Database.singleton.fetchStudents(byCLassId: classId))
print(studentsData)
observer.onNext(studentsData)
}, onError: { error in
print(error)
}).disposed(by: self!.disposeBag)
return Disposables.create()
}
}
不需要可观察的创建。函数B不需要返回新的observable。如果要将一个可观察的对象转换为另一个可观察的对象,可以使用map
operator。
错误处理问题。在函数B中,将捕获错误,但是Observable将永远不会完成。在我的示例中,我仅使用副作用来处理打印错误,因此错误将传播并且map
将不会运行。但是map
有一些策略。
[功能B不需要error handling in RxSwift中的asObservable
。
getAssignedClassData
在您的示例中未使用,可能实际代码已简化,因此功能B为:
assingnedClass