【问题标题】:How do you do continuations with RxJava Observables?你如何使用 RxJava Observables 进行延续?
【发布时间】:2014-11-24 22:47:18
【问题描述】:

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

【问题讨论】:

    标签: java android rx-java rx-android


    【解决方案1】:

    我认为你需要 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);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 1970-01-01
      • 2014-12-02
      • 2015-10-01
      • 1970-01-01
      • 2019-10-21
      • 2019-08-13
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多