如何使用RxJava Observables进行延续?
问题描述:
所以我有一个异步操作A
取决于第二个,B
。如何使B成为A的延续,就像您在.NET TPL中使用then函数的函数或ContinueWith一样?如何使用RxJava Observables进行延续?
让我们从Android上scenarion在那里我有两个服务端点:
- 一个用于提取网址的图像
- 一个用于读取图像本身
代码:
private void loadImage(final ImageView imageView) {
Observable<String> stringObs = getImageUrlAsync();
stringObs.subscribe(new Action1<String>() {
@Override
public void call(String imageUrl) {
// First async operation done
Observable<Bitmap> bitmapObs = getBitmapAsync(imageUrl);
bitmapObs.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap image) {
// second async operation done
imageView.setImageBitmap(image);
}
});
}
});
}
我想不是使这两个操作以代码方式嵌套,但按照更像它的格式进行操作。
我一直无法找到有关RxJava/RxAndroid中Observable的延续。任何人都可以帮忙吗?
答
我想你需要API flatMap
如:
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("imageUrl");
}
}).flatMap(new Func1<String, Observable<Bitmap>>() {
@Override
public Observable<Bitmap> call(String imageUrl) {
return getBitmapAsync(imageUrl);
}
}).subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap o) {
imageView.setImageBitmap(image);
}
});