问题描述
我想从三个不同的API中获取数据,然后将其保存在数据库中。因此,操作后应将每个查询的数据分开。 如何用RxSwift做到这一点?压缩?在我的示例中,我仅使用两个URL,但这只是示例。
QueryService:
import Foundation
import RxSwift
class QueryService {
let albumsURL = URL(string: "https://jsonplaceholder.typicode.com/albums")!
func fetchAlbums() -> Observable<[Album]> {
return Observable.create { observer -> disposable in
let task = URLSession.shared.dataTask(with: self.albumsURL) { data,_,_ in
guard let data = data else {
observer.onError(NSError(domain: "",code: -1,userInfo: nil))
return
}
do {
let albums = try JSONDecoder().decode([Album].self,from: data)
observer.onNext(albums)
} catch {
observer.onError(error)
}
}
task.resume()
return disposables.create{
task.cancel()
}
}
}
func fetchUsers() -> Observable<[User]> {
return Observable.create { observer -> disposable in
let task = URLSession.shared.dataTask(with: URL(string: "https://jsonplaceholder.typicode.com/users")!) { data,userInfo: nil))
return
}
do {
let users = try JSONDecoder().decode([User].self,from: data)
observer.onNext(users)
} catch {
observer.onError(error)
}
}
task.resume()
return disposables.create{
task.cancel()
}
}
}
}
解决方法
我假设您正在尝试并行执行两个任务,并且希望通过一个可观察的对象来达到它们的结果。
在这种情况下,您的代码应如下所示:
Observable.zip(service.fetchAlbums(),service.fetchUsers())
.subscribe(onNext: { (albums,users) in
print(albums)
print(users)
})
.disposed(by: self.disposeBag)