如何避免在RxJava中将参数链接为输入和输出



我还没有关于ReactiveX的坚实概念。我想做的是从FTP服务器下载新文件。

我目前想到的序列是connect->从FTP列出文件->过滤掉已经在本地路径中的文件->下载新文件。

如何以ReactiveX的方式做到这一点,而不必将FTP连接作为参数传递,并将其作为下一个操作员的输出返回?

我不认为拥有这样的东西是正确的方式:

fun listFilesFromFTP(ftpConnection : Connection) : Pair<Connection, List<Files>>
connectionObservable.flapMap(::listFilesFromFTP).flapMap(::filterLocalFiles).flatMap(::downloadFiles)  ... and so on...

如果你想以纯函数的方式实现这一点,而不依赖于函数参数以外的任何数据,那么你可以定义一个FileDownloadContext,其中包含所有连接和文件信息。然后你的所有函数都可以接收FileDownloadContext并对其进行编辑,然后传递到下一个函数。

或者,您可以通过将这些函数封装在一个类中,以有状态的方式进行操作。因此函数可以达到类状态。这与闭包概念类似。当然,对于每个新的文件下载请求,您需要创建一个新的状态对象,而不是混合状态。

最新更新