RxJava - 并行运行时合并多个 observable 的结果

时间:2021-05-19 06:48:44

标签: java android kotlin rx-java rx-java2

我有三个独立的 observables,它们只执行剪切音频/视频文件的基本任务。我想要实现的是,我想并行运行所有这些任务,并将此任务的结果组合到一个 POJO 模型中。我已经为这些操作尝试了 Observable.zip(),但是一旦其中一个可观察操作完成,它就会完成。 这是我的三个 observables,它们返回一个字符串,表示音频/视频的路径。

        val recordingObservable = Observable.fromCallable {
            cutTheAudioRecordingFFMPEG(finalOutputDuration)
        }

        val musicObservable = Observable.fromCallable {
            cutTheMusicFFMPEG(finalOutputDuration)
        }

        val videoObservable = Observable.fromCallable {
            cutTheVideoRecordingFFMPEG(finalOutputDuration)
        }

这是我的 zip 函数,

Observable.zip<String, String, String, FinalPreviewModel>(
            recordingObservable,
            musicObservable,
            videoObservable,
            { recordingPath, musicPath, videoPath ->
                //Here I am converting all path to a POJO model but it is not working. 
                //As soon as one observable completes, all other observable are automatically completes 
                // and it gives me wrong path which generate wrong POJO.
                FinalPreviewModel(musicPath, recordingPath, videoPath)
            }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ finalPreviewModel ->
                //Do something with final previewmodel.
            }, {
                hideProgressDialog()
                Timber.d(it)
            }, {

            })

事情是,如果 observable 之一完成,则 zip 完成。这给了我其他两个可观察对象的错误路径。那么有没有其他方法可以实现并行执行,等待所有结果并将它们组合成一个模型并在该模型上做一些事情。还有什么方法可以处理错误管理,例如如果 observable 中的一个失败或抛出错误,另一个应该照原样继续吗?

0 个答案:

没有答案