具有.subscribe和.concatmap

时间:2018-12-10 19:02:19

标签: java callback rx-java rx-java2

我正在尝试使用Observable.fromIterable(array).subscribe()向端点发送一系列请求,目的是使每个项目依次到达后端。

当前,Observable在触发下一个请求之前没有等待发布到端点的异步任务完成。我有两个潜在的想法,但不确定如何实现。

  1. .subscribe().onNext()移动到回调中,以确保异步任务完成后调用每个元素。

  2. 改为使用.concatmap。我已经看到此贴是推荐给有类似我自己的动作,一些带有异步任务的项目的人的方法,但是我不确定为什么它会起作用或者它与我上面的方法有何不同。

1 个答案:

答案 0 :(得分:0)

fromIterable()运算符将发出它可以发出的所有项目。下游必须使用map()运算符之一来管理对异步操作的等待。

Observable.fromIterable(array)
  .flatMap( item -> 
             Observable.fromCallable( asyncOp( item ) ), // 1
             1) // 2
  .subscribe(); // 3
  1. fromCallable()使异步操作变得可观察。
  2. 数字1flatMap施加的“最大并行度”。这意味着flatMap()将只订阅一个主题并等待结果,然后再处理下一个主题。
  3. 您的subscribe()运算符应始终具有一个onError()处理程序。否则,上游错误可能会使线程崩溃。