gpt4 book ai didi

android - RxAndroid 重新订阅 Observable 的 onError 和 onComplete

转载 作者:行者123 更新时间:2023-11-30 00:19:37 25 4
gpt4 key购买 nike

我的问题可能更多是概念性的。
我通过 Observable 契约(Contract)了解到,在 onCompleteonError 被调用后,我的 Observable 将不再发出任何项目。
但我使用的是适用于 Android 的 RxBindings,因此它不是“我的 Observable”,而是点击 Button 发出的项目。

fun observeForgotPasswordButton(): Disposable {
return view.observeForgotPasswordButton()
.flatMap {
authService.forgotPassword(email).toObservable<Any>()
}
.subscribe({
// on next
Timber.d("fun: onNext:")
}, { error ->
// on error
Timber.e(error, "fun: onError")
}, {
// onComplete
Timber.d("fun: onComplete")
})
}

observeForgotPasswordButton() 返回一个 Observable

fun observeForgotPasswordButton(): Observable<Any> = RxView.clicks(b_forgot_password)

问题是 authService.forgotPassword(email) 是一个 Completable,它会调用 onCompleteonError 两者都导致订阅结束后我不能再重复使用该按钮。
有没有办法规避这种行为?因为在发生错误时我希望能够重试。
此外,我希望能够发送多封忘记密码的电子邮件。

最佳答案

您可以使用retry()repeat() 运算符来自动重新订阅原始的Observable(或Completable)。

fun observeForgotPasswordButton(): Disposable {
return view.observeForgotPasswordButton()
.flatMap {
authService.forgotPassword(email).toObservable<Any>()
}
.repeat() // automatically resubscribe on completion
.retry() // automatically resubscribe on error
.subscribe({
// on next
Timber.d("fun: onNext:")
}, { error ->
// on error
Timber.e(error, "fun: onError")
}, {
// onComplete
Timber.d("fun: onComplete")
})
}

关于android - RxAndroid 重新订阅 Observable 的 onError 和 onComplete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com