发出Single之前的条件延迟

时间:2018-07-02 05:40:12

标签: android rx-android

RESTful API端点返回JSON响应。 JSON响应包含20个不同的JSON-Array元素。每个元素都有一个图像URL。

收到第一个响应后,我打算使用翻新动态URL遍历JSON数组并获取图像。

class Content { var items List<Item>? = null }

class Item { var image: String? = null 
    var imageBytes: ByteArray? = null
}

interface RestApi { @GET fun getContent(): Single<Content>
@GET fun getImageBytes(@Url url: String): Single<ResponseBody>
}

restApi.getContent()
    .map { content: Content -> {
        content.items?.forEach { item ->
            restApi.getImageBytes(item.image)
                .subscribe(object : DisposableSingleObserver<ResponseBody>() {
                    onSuccess(body: ResponseBody) {
                        item.imageBytes = body.getBytes()
                    }
                    onError(e: Throwable) { // TODO Implementation }
                })
            }
        }
    }

如何使getContent()方法在发出之前延迟,直到对getImageBytes()的所有调用也都以成功或错误完成?

1 个答案:

答案 0 :(得分:1)

使用Single时,您应该使用flatten observable,它将提供平面地图将占用的observables列表

 getListOfItems()
                .flattenAsObservable(new Function<Object, Iterable<?>>() {
                    @Override
                    public Iterable<?> apply(@NonNull Object o) throws Exception {
                        return toItems(o);
                    }
                })
                .flatMap(item -> doSomethingWithItem())
                .toList()