我需要与RxJava
和Retrofit
实现同步调用。我有一个id的ArrayList
。我需要迭代这个数组,并使用Retrofit
为每个id调用web服务器,但我知道如何只异步地做到这一点,你能告诉我如何做到这一点,就像在队列中,当一个调用完成后,下一个调用开始。
你的问题措辞很含糊,但我想我可能已经明白了。从一个项目列表开始,你可以用from()
创建一个可观察对象。这些值可以在API调用之后进行映射。使用concatMap()
可以保证结果的顺序,因此您可以有效地在结果之上获得一个可观察对象。你可以做任何你想做的事情,甚至可以调用toBlocking()
,使可观察对象同步。但这应该没有任何必要。
List<Result> results =
Observable.from(ids)
.concatMap(id -> callToWebServer(id))
.toList()
.toBlocking()
.single();
这段代码将同步执行它们
Observable.from(ids)
.map(id -> callToWebServer(id).toBlocking().first())
但是您需要在map()中仔细处理来自callToWebServer()的所有网络错误。