0

我正在尝试实现一个自动登录功能,并在自动登录完成后需要更改前一个可观察对象的参数时重试。

所以我创建了一个函数

class TestClass(): Function<Flowable<out Throwable>, Flowable<*>> {
    override fun apply(flowable: Flowable<out Throwable>): Flowable<*> {
        return flowable
                .flatMap {
                    if (it is HttpException && it.code() == 401 ) {
                        Timber.d("apply: Doing AutoLogin.")
                        dataSource
                                .login(document, password)
                                .map {
                                    //Auto login done, update user
                                }
                                .doOnError({ 
                                    // login failed
                                })
                                .toFlowable()
                    } else {
                        Flowable.error(it)
                    }
                }
    }
}

并以这种方式应用它:

dataSource.apiCall(user)            
            .retryWhen(TestClass())
            .subscribe()

也试过这种方式:

    Single.defer { 
                dataSource.apiCall(user)            
                    .retryWhen(TestClass())
            }
            .subscribe()

}

问题是,在重试请求时登录后,用户没有更新。

我做错了什么?

4

0 回答 0