RXJava停止当前流直到另一个完成

时间:2017-11-30 17:39:07

标签: java android rx-java rx-java2

我遇到了rx java的问题。

我有一个当前流,在某些时候给我一个Either

该响应具有外部资源,如图像网址,我想将每个网址发送到外部类,异步下载,如果所有这些都没问题,请继续接收或者如果其中一个资源发生故障,正在下载的是返回Either.error(MyError());

我的问题是,当我在资源提供者中创建一个新的observable时,需要订阅开始运行,但我不知道该怎么做。

这是我目前的代码(不确定是否编译,但你明白了):

    private Observable<Either<Error, Response>> prefetchResourcesOrError(final Either<Error, Response> errorOrResponse) {
        if (errorOrResponse.isResponseWithImages()) {
            ResponseImages responseImages = (ResponseImages) responseImages.getResponse();
            return 
             Observable.fromIterable(responseImages.getResources()
                    .map(resourcesProvider::prefetch)
                    .onErrorReturn(throwable -> Observable.<Either<Error, Response>>just(Either.left(new MyError())))
                    .map(observable -> errorOrResponse);
        } else {
            return Observable.just(errorOrResponse);
        }
    }


//Resource prefetch method

    Observable prefetch(Resource resource) {
        return Observable.just(resource)
                .flatMap((Function<Resource, ObservableSource<?>>) res1 ->
                        Observable.create((ObservableOnSubscribe<Void>) emitter ->
                                        resourceLoader.prefetch(res1.getUrl(), new ImageLoaderListenerAdapter() {
                                            @Override
                                            public void onException(Exception e) {
                                                emitter.onError(e);
                                            }

                                            @Override
                                            public void onResourceReady() {
                                                emitter.onNext(null);
                                            }
                                        })
                                )
                );
    }
}


//The main Stream
//MainObservable is an Either<Error, Response> errorOrResponse
return mainObservable.flatMap(this::prefetchResourcesOrError);

0 个答案:

没有答案