【发布时间】:2019-08-10 20:38:36
【问题描述】:
在我的应用程序中,我必须从 Amazon S3 下载几个文件,为此我创建了一个函数,该函数可以下载单个文件并返回和观察。我还创建了第二个函数,我称之为 downloadAll。此函数的目的是按顺序下载每个 S3 文件。
由于某些文件很大并且文件很多(超过 50 个),如果我只是合并所有可观察的数据,我最终会因为并发性而从亚马逊收到很多超时。
我尝试过的:
并发合并
let observables = self.syncItem!.files.map { (f) in
return Observable.of(f)
}
let o = Observable.from(observables).merge(maxConcurrent: 2)
结果:我下载了前两个文件,但没有下载其他文件。
ConcatMap
return Observable.from(self.syncItem?.files).concatMap({ (file) in
return self.downloadS3File(file: file)
})
结果:只下载了第一个文件
**DownloadS3FileFunction 被省略...对于单个文件下载工作正常,并在下载完成时发出一个 File 对象**
在问这个问题之前我已经搜索了很多。有人可以帮忙吗?
【问题讨论】: