swift - RxSwift 数组中的可观察值序列

标签 swift rx-swift

在我的应用程序中,我必须从 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/

相关文章:

ios - 在 SpriteKit 中创建按钮 : Swift

swift - 录制因多任务处理和内容调整而中断

ios - 在静态表格 View 单元格中将文本设置为动态

ios - 为 UITableView 使用 RxCocoa 扩展时,如何控制 canEditRowAtIndexPath

ios - RxSwift - 无法绑定(bind)自定义 UICollectionViewCell 的变量

memory - 在 RxSwift 闭包上使用 'self' ...实例方法作为参数怎么样?

iOS UITextView 的属性文本不从 View 顶部显示

ios - 如何共享服务器 View 的 viewMode 驱动程序属性?

swift - 当 TableView 中的项目超过 12 个或更多时,我将如何编写测试以确保 UIbutton "Show all Providers"出现?

objective-c - 由于未解析的标识符,CocoaPods 构建失败