【问题标题】:RxSwift Sequence of observables from array来自数组的 RxSwift 可观察对象序列
【发布时间】: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 对象**

在问这个问题之前我已经搜索了很多。有人可以帮忙吗?

【问题讨论】:

    标签: swift rx-swift


    【解决方案1】:

    如果在您使用concatMap 时只下载第一个文件,那么问题出在您的downloadS3File(file:) 函数中。当它完成下载文件时它不会发出完成事件,因此 concatMap 不会开始第二次下载。

    这可能也是您的其他解决方案的问题。

    【讨论】:

    • 实际上我只是发出一个未完成的下一个事件......我将发出一个完整的事件并返回。感谢您的反馈意见 ! :D
    • 是的,在 onNext 修复问题后设置 observable.onComplete() 就是问题...再次感谢
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2018-06-03
    • 2016-06-23
    相关资源
    最近更新 更多