首页 > 解决方案 > 如何等到完成一个呼叫列表来呼叫以下呼叫

问题描述

我正在使用rxJava,我想做forEach一个列表,为每个项目打一个电话,然后一旦这些电话完成,再打电话给另一个。

这是我的代码

val flowableList = answerListCreated.map {
        questionService.addAnswerToQuestion(
            questionId,
            it.id,
            MyUtils.getAccessTokenFromLocalStorage(context = mContext!!)
        )
    }
    disposable = Flowable.concat(flowableList)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe {
            addCorrectsAnswersToQuestion(questionId)
        }

但它加入了subscribe两次,它应该加入一次订阅。

我错过了什么?我认为 concat 应该是一个不错的选择,因为我已经读过它首先执行第一项工作,然后在 job1 完成后启动 job2。

好吧,如果有必要,我也可以返回Observable<T>,从现在开始,我将返回Flowable<T>以进行测试。

标签: androidkotlinobservablerx-java

解决方案


我认为您需要执行以下操作:

val disposable = Flowable.fromArray(answerListCreated)
    .flatMap {
        questionService.addAnswerToQuestion(
            questionId,
            it.id,
            MyUtils.getAccessTokenFromLocalStorage(context = mContext!!)
        )
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
    }
    .toList()
    .subscribe {
        addCorrectsAnswersToQuestion(questionId)
    }

推荐阅读