我希望在我的 Java 应用程序中使用 Observable 包装经过身份验证的调用,如果有必要,它将在发出请求之前重新授权我的用户。我使用Shape Code Blog中的这种方法在 Objective-C 中使用 ReactiveCocoa 做了类似的事情:
- (RACSignal *)doRequestAndRefreshTokenIfNecessary:(RACSignal *)requestSignal {
return [requestSignal catch:^(NSError *error) {
// Catch the error, refresh the token, and then do the request again.
BOOL hasRefreshToken = [UserManager sharedInstance].refreshToken != nil;
BOOL httpCode401AccessDenied = error.code == -1011;
if (httpCode401AccessDenied && hasRefreshToken) {
NSLog(@"Will attempt to refresh access token.");
return [[[self refreshToken] ignoreValues] concat:requestSignal];
}
return requestSignal;
}];
}
RACSignal 是可观察的 ReactiveCocoa 类似物。此方法创建一个 RACSignal,它将捕获初始请求发出的任何错误信号,如果该错误与给定条件匹配(在这种情况下,访问被拒绝并且有可用的身份验证令牌),则透明地触发一个新的 RACSignal 以使用刷新令牌然后重新发送原始信号。
RxJava 是否提供类似的功能?catch:
我在Combining Observables文档中找不到类似的东西。