Как дождаться завершения одного списка вызовов для вызова следующих

#android #kotlin #observable #rx-java

#Android #kotlin #наблюдаемый #rx-java

Вопрос:

Я использую 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 дважды, и он должен присоединиться к subscribe один раз.

Чего мне не хватает? Я подумал, что concat должен быть хорошим вариантом, потому что я читал, что сначала выполняется первое задание, а затем, когда job1 завершено, запускается job2.

Ну, также при необходимости я могу вернуться Observable<T> , с этого момента в моем сервисе я возвращаюсь Flowable<T> , чтобы протестировать это.

Комментарии:

1. Используйте map для объединения наблюдаемых в цепочку

Ответ №1:

я думаю, вам нужно сделать что-то вроде:

 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)
    }