[英]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<>();
一種方法是:
Observable.fromIterable
工廠方法從初始List<MediaChunk>
設置流 flatMap
該流中的每個發射,並使用Observable.just
工廠方法從每個MediaChunk
實例創建音頻+視頻URL流 結果是URL的扁平化,訂閱者可以為其添加自己的onNext
, onError
和onComplete
處理程序。
代碼看起來像這樣:
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.