android RxJava Observable.from发布到服务(android RxJava Observable.from to post to a service)

系统教程 行业动态 更新时间:2024-06-14 16:59:47
android RxJava Observable.from发布到服务(android RxJava Observable.from to post to a service)

我有一个项目列表,我需要提取一些值,并为每个项目进行api调用。 要做到这一点,我正在使用这样的东西_

Observable.from(myList) .flatMap{ item -> return serviceInteractor.uploadToServer(item) } .map { serverResponse -> return serverResponse.getResponseCode } .toList() .subscrible{ responseList -> // do something with all the responses }

好的问题是,我不知道为什么所有的呼叫都是并行的。 是不是应该等待第一个响应,映射结果,从Observable.from()继续下一个项目,最后返回responseMessages的最终列表? 发生的事情是,一切都在同一时间发生。 为了确认这一点,如果我在toList方法之前放置一个延迟(1,TimeUnit.Seconds),一切都在同一时间发生,只有最后的onNext被延迟。

我怎么能做到这一点? 有一个id列表,想要逐个上传到服务器,等待每一个完成,如果成功或失败则继续下一个

I have a list of items which i need to extract some values and make an api call for each of the item. To do that, i'm using something like this_

Observable.from(myList) .flatMap{ item -> return serviceInteractor.uploadToServer(item) } .map { serverResponse -> return serverResponse.getResponseCode } .toList() .subscrible{ responseList -> // do something with all the responses }

Ok so the problem is, i don't know why all the calls are made in parallel. Isn't it supposed to wait for the first response, map the results, proceed to the next item from the Observable.from() and at the end return the final list of responseMessages? What is happening is, everything happens at the same time. To confirm this, if i put a delay(1, TimeUnit.Seconds) before the toList method, everything happens at the same time, only the final onNext is delayed.

How can i accomplish this? Have a list of ids, want to upload to server one by one, waiting for each one to complete, proceed to next if success or fail

最满意答案

是的,你需要使用ConcatMap

平面地图使用合并运算符,而concatMap使用concat opertor 。

所以顺序就是这样

flatMap输出序列已merged concatMap输出序列是ordered

如本答案所述

在这里你可以看看这个例子

String arrData[] = {"0", "1", "2", "3", "4"}; Integer arrDelay[] = {1000, 6000, 4000, 9000, 2000}; Observable.from(arrData) .concatMap(s -> Observable.from(arrData) .delay(arrDelay[Integer.parseInt(s)],TimeUnit.MILLISECONDS)) .map(integer -> integer) .toList() .doOnCompleted(() -> Log.v("log", "doOnCompleted")) .subscribe(integer -> Log.v("log", "" + integer));

在这里你可以检查延迟将是arrDelay项的总和,因为我们已经使用了toList()

我知道我迟到了回答:)

Yes you need to use ConcatMap

Flat map uses merge operator while concatMap uses concat opertor.

so sequence will be like this

flatMap output sequence is merged concatMap output sequence is ordered

as described in this answer

here you can take a look on this example

String arrData[] = {"0", "1", "2", "3", "4"}; Integer arrDelay[] = {1000, 6000, 4000, 9000, 2000}; Observable.from(arrData) .concatMap(s -> Observable.from(arrData) .delay(arrDelay[Integer.parseInt(s)],TimeUnit.MILLISECONDS)) .map(integer -> integer) .toList() .doOnCompleted(() -> Log.v("log", "doOnCompleted")) .subscribe(integer -> Log.v("log", "" + integer));

here you can check that delay will be total of arrDelay item as we have used toList()

i know i am late to give answer on this :)

更多推荐

本文发布于:2023-04-17 08:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/0751211d8bc1fdfd8425fc207c9a80af.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RxJava   android   Observable   service   post

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!