在我的应用程序中,我必须从 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 对象 **
在提问之前我已经搜索了很多。有人可以帮忙吗?
最佳答案
如果使用 concatMap
时仅下载第一个文件,则问题出在您的 downloadS3File(file:)
函数中。当完成下载文件时,它不会发出已完成事件,因此 concatMap 不会开始第二次下载。
这也可能是您的其他解决方案的问题。
关于swift - RxSwift 数组中的可观察值序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445533/