我的问题可能更多是概念性的
我通过Observable
合同获得该结果,Observable
或onComplete
被调用后onError
将不再发出任何内容。
但是我使用的是RxBindings for Android,因此它不是"我的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
,它会调用onComplete
或onError
这两个因素导致我再也无法重复使用该按钮订阅结束
有办法规避这种行为吗?
因为发生错误我希望能够重试
此外,我希望能够发送多个忘记密码的电子邮件。
答案 0 :(得分:1)
您可以使用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")
})
}