在 RxJava 中执行每个 Concat 元素之前如何做一些事情?

How to do something before executing each Concat element in RxJava?

我正在用 kotlin 编写 api 同步模块。我想向人们展示当前正在下载的应用程序,但我对此有疑问。让我向您展示我正在做的示例代码:

private val downloadProcessNameList = listOf(
    "Controller 1",
    "Controller 2"
)

private val downloadList = listOf(
    controller1.allFromApi(),
    controller2.allFromApi()
)

init {
    liveDownloadPercent.postValue(0)
    liveSavePercent.postValue(0)

    mDisposable.add(
        Maybe.concat(downloadList)
            .doOnNext { liveDownloadStatus.postValue(downloadProcessNameList[i]) }
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .subscribe(
                {
                    Log.i(LOG_HEADER, it.size.toString())

                    i++
                },
                {
                    Log.e(LOG_HEADER, it.message)
                },
                {
                    Log.i(LOG_HEADER, "onComplete")
                }
            )
    )
}

问题出在这一行

.doOnNext { liveDownloadStatus.postValue(downloadProcessNameList[i]) }

它在第一次控制器响应后立即执行,用户首先看不到应用程序在做什么。我到处搜索,找不到正确的答案。如何在开始 Concat 之前显示来自 downloadProcessNameList[i] 的信息?当然,我可以在 Maybe.concat 之外展示它,但我不喜欢它?也许您知道可以做什么。

提前谢谢你, 保罗

您可以使用 doOnSubscribe() 它会在可观察的订阅后立即调用