我使用的是retrofit,我觉得rxjava (使用retrolambda)很适合下面的流程:
然而,我不知道在步骤2a之后该做什么。到目前为止这是我的代码
apiService.getWidgets(token)
.flatMapIterable(widgets -> widgets)
.flatMap(widget -> apiService.getArticles(token, widget.type))
...
.toList()
.subscribe(
modifiedWidgets -> saveWidgets(modifiedWidgets),
throwable -> processWidgetError(throwable)
);我曾与一些操作符玩过,但是当链接时,我似乎总是缩小得太窄(例如,获得一篇文章的句柄),然后就不能再访问原始小部件来进行修改了。
@GET("/widgets")
Observable<List<Widget>> getWidgets(@Header("Authorization") String token);
@GET("/articles")
Observable<List<Article>> getArticles(@Header("Authorization") String token, @Query("type") String type);发布于 2015-05-14 11:53:12
您可以在流的某些点插入doOnNext以添加副作用:
apiService.getWidgets(token)
.flatMapIterable(v -> v)
.flatMap(w ->
apiService.getArticles(token, w.type)
.flatMapIterable(a -> a)
.doOnNext(a -> db.insert(a))
.doOnNext(a -> {
w.articleName = a.name;
w.articleUrl = a.url;
})
.takeLast(1)
.map(a -> w)
)
.toList()
.subscribe(
modifiedWidgets -> saveWidgets(modifiedWidgets),
throwable -> processWidgetError(throwable)
);这方面的Here is运行示例。
https://stackoverflow.com/questions/30235441
复制相似问题