【发布时间】:2018-06-03 16:04:28
【问题描述】:
我正在尝试理解反应式编程背后的概念,目前我正在做一个 JavaFX 应用程序,它会在 http 请求后加载 3 个随机 github 用户。 我创建了一个 Observable 来包装对 github api 的调用(api 返回 30 个元素的列表),并从响应中提取前 3 个元素以将它们放置在页面中。
Observable<List<GitHubUser>> loadButtonObservable = JavaFxObservable
.actionEventsOf(runButton)
.flatMap(ae ->
Observable.fromCallable(() ->
githubExternalService.getUsersSince(
new Random().nextInt(500))));
loadButtonObservable
.take(1)
.map(list -> list.get(0))
.subscribe(i -> userOneVBox.getChildren().add(createText(i)));
loadButtonObservable
.skip(1)
.take(1)
.map(list -> list.get(0))
.subscribe(i -> userTwoVBox.getChildren().add(createText(i)));
loadButtonObservable
.skip(2)
.take(1)
.map(list -> list.get(0))
.subscribe(i -> userThreeVBox.getChildren().add(createText(i)));
我期待当单击按钮时,会发出请求并且订阅者会收到 30 个元素的列表,但相反,整个 observable 链是从每个订阅者运行的。 你能帮我理解如何构造代码,让它执行 1 个请求而不是 3 个请求吗?
【问题讨论】:
标签: rx-java reactive-programming rx-java2 reactive reactive-streams