android - subscribe成功执行后rxjava定时器抛出超时异常

标签 android rx-java rx-java2

我有以下代码:

repo.getObservable()
            .timeout(1, TimeUnit.MINUTES)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnSubscribe {
                _isInProgress.value = true
            }
            .doFinally {
                _isInProgress.value = false
            }
            .subscribe(
                    {
                        Timber.d("Success")
                    },
                    {

                        Timber.e(it)
                    })
            .trackDisposable()

问题是我在几秒钟后成功收到成功消息,但我的预加载器仍然等待 1 分钟,然后订阅的错误部分被执行。这是预期的行为吗?如果订阅的成功部分被执行,我该怎么做才能停止超时?

P。 S. 从 getObservable() 返回的 Observable 是这样创建的:PublishSubject.create()

最佳答案

如果您需要一个结果,请在 timeout 之前或之后使用 take(1):

repo.getObservable()
        .take(1) // <---------------------------------------------
        .timeout(1, TimeUnit.MINUTES)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnSubscribe {
            _isInProgress.value = true
        }
        .doFinally {
            _isInProgress.value = false
        }
        .subscribe(
                {
                    Timber.d("Success")
                },
                {

                    Timber.e(it)
                })
        .trackDisposable()

关于android - subscribe成功执行后rxjava定时器抛出超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405736/

相关文章:

android - 来自画廊的图像自动旋转 - Android

android - Interface Null object Reference 通过在 Activity 中实现接口(interface)来与 fragment 通信?

Android/RxJava,防止同类多个订阅

java - 创建像环形缓冲区一样批处理的 Observable(需要建议)

java - 如何将异步 promise 代码转换为 rxjava

android - 如何更改最后一个 ListView 适配器索引的颜色

android - Microsoft Azure DevOps Pipeline 失败,Gradle Android 中出现连接重置错误

java - RxJava : Consume result of Observable on another thread

java - 获取数据时发生方向更改时的 RxJava2 UndeliverableException

android - RxJava Single to Completable to Single - 如何将第一个 Single 的结果传递给第二个 Single