繁体   English   中英

RxJava-可观察的多个任务

[英]RxJava - Multiple tasks in a observable

我有一个包含许多对象的列表,我将以可观察的方式使用它,每个对象都有两个url,在每次使用时,我都应确保两个url均已成功下载,如果其中一个url未下载,则RxJava应该停止工作,我是RxJava中的新功能,我可以做一些简单的工作。

这是我的对象

public class mediaChunk
{
    public String audioChunkUrl;
    public String videoChunkUrl;
}

List<mediaChunk> list = new ArrayList<>();

一种方法是:

  1. 使用Observable.fromIterable工厂方法从初始List<MediaChunk>设置流
  2. flatMap该流中的每个发射,并使用Observable.just工厂方法从每个MediaChunk实例创建音频+视频URL流

结果是URL的扁平化,订阅者可以为其添加自己的onNextonErroronComplete处理程序。

代码看起来像这样:

Observable.fromIterable(
        Arrays.asList(
            new MediaChunk("audio-1", "video-1"),
            new MediaChunk("audio-2", "video-2"),
            new MediaChunk("audio-3", "video-3")
        ))
        .flatMap(chunk -> Observable.just(chunk.audioChunkUrl, chunk.videoChunkUrl))
        .subscribe(
            value -> {
              System.out.println("## onNext(" + value + ")");
            },
            error -> {
              System.out.println("## onError(" + error.getMessage() + ")");
            },
            () -> {
              System.out.println("## onComplete()");
            }
        );

不确定是否符合要求,但希望至少足以激发一些想法。

更新-例如映射排放Completable

Observable.fromIterable(
    Arrays.asList(
        new MediaChunk("audio-1", "video-1"),
        new MediaChunk("audio-2", "video-2"),
        new MediaChunk("audio-3", "video-3")
    ))
    .flatMap(chunk -> Observable.just(chunk.audioChunkUrl, chunk.videoChunkUrl))
    .flatMapCompletable(url -> {
      return Completable.fromCallable(() -> {
        return "## ...handling network call for [" + url + "]";
      });
    })
    .subscribe(
        () -> {
          System.out.println("## onComplete()");
        },
        error -> {
          System.out.println("## onError(" + error.getMessage() + ")");
        }
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM