RxJava 2 어댑터와 함께 Retrofit 2를 사용하고 있습니다. 서버가 401 권한이 반환 할 때마다Retrofit 2 + RxJava retryWhen
, 나는 토큰을 새로 고치고 요청을 재 시도 : refreshToken 간단한 개조 호출입니다
apiCall.retryWhen(es -> es
.flatMap(e -> {
if (isUnauthorizedException(e)) {
return refreshToken();
}
return Flowable.<User>error(e);
}));
: 이제
public Flowable<User> refreshToken() {
return retrofitService.login(userCredentials);
}
, 내가 제한 싶습니다을 그러한 새로 고침이 가능한 횟수. 그러나 take(1)
을 단순히 추가하면 retryWhen가 onNext 직후 onCompleted를 수신하고 다시 시도하기 전에 요청을 취소하기 때문에 작동하지 않습니다.
당연히 나는 원하는 효과를 얻기 위해 take(2)
을 할 수 있지만 해킹처럼 보입니다.
Rx 연산자를 사용하여 가장 좋은 방법은 무엇입니까? 또한 "어설 션"논리를 가진 연산자가 있습니까 (플랫 맵에서 if
없애기 위해)?
나는 또한 OkHttp 인터셉터를 사용하여 같은 것을 얻을 수 있다는 것을 알고 있지만 Retrofit-RxJava 솔루션에 관심이 있습니다.
''다시 시도 하시겠습니까? ' - 유동 플로 블 refreshToken() { return retrofitService.login (userCredentials) .retry (3); }''- 오류가 발생하기 전에 최대 3 회 재 시도합니다. –
Fred