2

所以我有一个A依赖于一秒的异步操作,B. 如何使 B 成为 A 的延续,就像使用then函数 Javascript Promises 或.NET TPL中的ContinueWith一样?

让我们从 Android 中获取一个场景,其中我有两个服务端点:

  • 一种用于获取图像的 URL
  • 一种用于获取图像本身

代码:

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 中的 Observables,我一直找不到任何关于延续的信息。有人可以帮忙吗?

4

1 回答 1

13

我认为你需要 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);
        }
    });
于 2014-11-24T14:47:18.657 回答