我有三个独立的 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 中的一个失败或抛出错误,另一个应该照原样继续吗?