带有异步的列表中的RxJava等待回调

时间:2017-06-07 11:06:46

标签: java rx-java observable rx-java2

List<String> listExample = Arrays.asList("one", "two", "three");

想想我有字符串列表,并使用 RxJava(Observable.fromArray

Observable.fromArray(ids.toArray(new String[ids.size()])).subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {

    }
});

这里认为每个字符串都有一个Async回调,一旦我收到回调,它应该移动到下一个字符串。是否可以使用rxjava?

这是我目前正在使用的代码,它不会等到回调权利。

for (String id : ids) {
    getMessage(id, new urlGenCallback() {
        @Override
        public void urlAndToken(String url, String token, String idx) {

        }
    });
}

谢谢 @Geoffrey Marizy

答案:Check Below 有关ConcatMap的更多信息Visit Here

2 个答案:

答案 0 :(得分:1)

您正在寻找concatMap运营商。有关此主题的完整文章:https://fernandocejas.com/2015/01/11/rxjava-observable-tranformation-concatmap-vs-flatmap/

将您的请求包装为Observable,然后将其作为参数传递给concatMap:

Observable.fromArray(ids.toArray(new String[ids.size()])).concatMap(/* your request returning an Observable */)

答案 1 :(得分:0)

Observable.fromArray(ids.toArray(new String[ids.size()]))
        .concatMap(s -> {
            return Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
                    getMessage(s, new urlGenCallback() {
                        @Override
                        public void urlAndToken(String url, String token, String id) {
                            e.onNext("......");
                            e.onComplete();
                        }
                    });
                }
            });
        }).subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {
       //All other code goes here
    }
});