私は、OAuth2を使用して認証し、Retrofitを使用してRESTfulサービスからデータを取得するアプリを持っています。今、私はトークンの検索とリフレッシュを実行している。トークンは、その(スケジューラは省略)のようにリフレッシュされますRxJava:複数のリクエストが同時に送信されたときにトークンをリフレッシュする方法はありますか?
// Each Retrofit call observable is "wrapper" using this method
protected <T> Observable<T> wrap(@NonNull final Observable<T> page) {
return authenticate()
.concatMap(token -> page)
.onErrorResumeNext(throwable -> {
Log.w(TAG, "wrap: ErrorResumeNext", throwable);
return refreshAccessToken()
.flatMap(accessToken -> page);
}));
}
// Retrieves the access token if necessary
Observable<AccessToken> authenticate() {
// Already have token
if(accessToken != null) return Observable.just(accessToken);
// No token yet, fetch it
return api.getAccessToken(...);
}
// Refreshes the token
Observable<AccessToken> refreshAccessToken() {
return api.refreshToken(...);
}
これは動作しますが、いくつかのケースでは、複数の要求を一度に送信され、彼らは両方のさわやかなプロセスを起動する - 基本的に私のアプリは、多くのトークンをリフレッシュして終わります現時点ではリクエストがあった時間があります。
質問:トークンをリフレッシュする必要がある場合、トークンをリフレッシュする必要がある進行中のリクエストの数にかかわらず、トークンをリフレッシュする必要がある場合は、最初のリクエストが正常に呼び出されて新しいトークンを取得するまで、何らかの形で他のリクエストを「待機」することはできますか?
これはトリックを行うようです!私はこれをある時点で持っていましたが、それは当時は機能しませんでした。おそらく何か別のものがあったでしょう。 – manabreak
このトピックのサンプルコードを書くことができますか? –