我正在尝试使用Observable.fromIterable(array).subscribe()
向端点发送一系列请求,目的是使每个项目依次到达后端。
当前,Observable在触发下一个请求之前没有等待发布到端点的异步任务完成。我有两个潜在的想法,但不确定如何实现。
将.subscribe().onNext()
移动到回调中,以确保异步任务完成后调用每个元素。
改为使用.concatmap
。我已经看到此贴是推荐给有类似我自己的动作,一些带有异步任务的项目的人的方法,但是我不确定为什么它会起作用或者它与我上面的方法有何不同。
答案 0 :(得分:0)
fromIterable()
运算符将发出它可以发出的所有项目。下游必须使用map()
运算符之一来管理对异步操作的等待。
Observable.fromIterable(array)
.flatMap( item ->
Observable.fromCallable( asyncOp( item ) ), // 1
1) // 2
.subscribe(); // 3
fromCallable()
使异步操作变得可观察。1
是flatMap
施加的“最大并行度”。这意味着flatMap()
将只订阅一个主题并等待结果,然后再处理下一个主题。subscribe()
运算符应始终具有一个onError()
处理程序。否则,上游错误可能会使线程崩溃。