簡體   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