0
点赞
收藏
分享

微信扫一扫

rxjava的Observable的.from.concatMap解决一个大流程里面嵌套小流程的问题

青乌 2024-10-12 阅读 1

mRunSubscription = Observable.from(taskList)
        .concatMap(new Func1<String, Observable<? extends String>>() {
                    @Override
                    public Observable<? extends String> call(final String s) {
                        return Observable.create(new Observable.OnSubscribe<String>() {
                            @Override
                            public void call(final Subscriber<? super String> subscriber) {
                                int tmpTime = Common.string2Int(s);
                                tmpTime =  tmpTime *1000;
                                LogUtil.d("sunny=tmpTime", tmpTime + "");
                                subscriber.onNext(s+"");
                                final CnSunnyCountDownTimer countDownTimer = new CnSunnyCountDownTimer(tmpTime, 1000) {
                                    @Override
                                    public void onTick(long millisUntilFinished, int percent) {
                                        LogUtil.d("sunny=onTick", millisUntilFinished + "");
                                        subscriber.onNext(millisUntilFinished+"");
                                    }

                                    @Override
                                    public void onFinish() {
                                        subscriber.onNext("onFinish");
                                        subscriber.onCompleted();
                                    }
                                };
                                countDownTimer.start();
                            }
                        });)
        .subscribe(new Observer<String>() {
                    @Override
                    public void onCompleted() {
                        LogUtil.d("sunny", "onCompleted");
                        //结束,发送结束的串口指令
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String str) {
                        LogUtil.d("sunny-onNext", str);
                    }
                });

最近遇到了一个工作程序的问题,用

rxjava的Observable的.from.concatMap

解决了。

.from直接发送一个 List 集合数据给观察者

.concatMap将事件序列中的元素进行整合加工,返回一个新的被观察者;

可以调用多次

subscriber.onNext();

只有发送 subscriber.onCompleted();结束时才会进入下一个from集合中的被被观察者。

这样就解决了在一个大流程里面嵌套小流程的问题

举报

相关推荐

0 条评论