我试图通过将多个改造 api 调用链接在一起来创建一个 observable。步骤是:
- 使用 api 调用获取 json 对象列表
- 对于列表中的每个对象,进行另一个 api 调用以获取有关该项目的更多详细信息
- 将从这个新的详细对象获取的数据写入磁盘上的文件(列表中的每个项目都会发生这种情况)
- 最后返回一个单独对象的可观察对象,该对象要求为之前的每个对象创建一个文件
这是我到目前为止所拥有的:
public static Observable<DownloadedFiles> downloadFiles() {
DownloadedFiles downloadedFiles = new DownloadedFiles();
Observable.create(subscriber -> {
return getRestService().getObjectList()
.flatMapIterable(objects -> objects)
.flatMap(objectLimited -> getRestService().getObject(objectLimited.getPath()))
.doOnNext(objectFull -> {
try {
File file = new File();
// Extract data from objectFull and write new file to disk
// ...
} catch (IOException e) {
subscriber.onError(e);
}
downloadedFiles.putFile(file);
})
.toList()
.map(objects -> downloadedFiles)
.finallyDo(() -> {
subscriber.onNext(downloadedFiles);
subscriber.onCompleted();
});
});
}
@GET("/api/...")
Observable<List<Object>> getObjectList();
@GET("/api/.../{path}")
Observable<Object> getObject(@Path("path") String path);
有人可以确认我使用了正确的运算符。谢谢 。