【发布时间】:2016-11-10 02:17:25
【问题描述】:
鉴于我的应用程序将从服务器下载文件,而我只想同时进行 1 次下载,那么 RxAlamofire 怎么能做到这一点?我可能只是缺少一个 Rx 运算符。
这是粗略的代码:
Observable
.from(paths)
.flatMapWithIndex({ (ip, idx) -> Observable<(Int, Video)> in
let v = self.files![ip.row] as! Video
return Observable.from([(idx, v)])
})
.flatMap { (item) -> Observable<Video> in
let req = URLRequest(url: item.1.downloadURL())
return Api.alamofireManager()
.rx
.download(req, to: { (url, response) -> (destinationURL: URL, options: DownloadRequest.DownloadOptions) in
...
})
.flatMap({ $0.rx.progress() })
.flatMap { (progress) -> Observable<Float> in
// Update a progress bar
...
}
// Only propagate finished items
.filter { $0 >= 1.0 }
// Return the item itself
.flatMap { _ in Observable.from([item.1]) }
}
.subscribe(
onNext: { (res) in
...
},
onError: { (error) in
...
},
onCompleted: {
...
}
)
我的问题是 a) RxAlamofire 会同时下载多个项目,b) (progress) 块会为这些不同的项目(具有不同每个的进度信息,导致 UI 的行为有点奇怪)。
如何确保下载是一个一个完成而不是同时完成?
【问题讨论】:
-
请帮助我更好地理解您的问题。第一个问题 (a) 是您想要预防的吗?你想让 RxAlamofire 同时下载多个文件还是一次下载一个?如果是这样,那就是使用 RxAlamofire 重新处理呼叫的问题。还是您想同时下载多个项目,并且在更新进度条时遇到并发问题(即每个人都想同时更新进度条状态)? * 编辑 - 一次下载一个可以避免并发问题的麻烦。
-
第一种情况。 “一次下载一个”是目标。
标签: alamofire rx-swift rxalamofire