Android:发出 N 次 API 请求

问题描述 投票:0回答:1

我在我的项目中使用 Rx+Retrofit。将创建所谓的 API 缓存来保存失败的 POST 请求。然后我需要再次发送缓存的请求。那么使用 Rx 处理 N 个不同 API 请求的最佳方法是什么?如果某些请求失败,请求队列不应被破坏。也许 Rx 有一些更好的方法而不是简单的递归。谢谢。

android rx-java rx-kotlin
1个回答
0
投票

您可以使用 retryWhen 运算符以及自定义逻辑来重试失败的请求。

创建一个用于 API 缓存的类/ 使用 PublishSubject 进行队列/ 实现重试逻辑

 PublishSubject<ReqType> requestQueue = PublishSubject.create();

 requestQueue.flatMap(request -> {
   
    return apiService.makePostRequest(request)
        .retryWhen(errors -> errors
            .flatMap(error -> {
                if (shouldRetry(error)) {
                    // Retry the request after a delay
                    return Observable.timer(timeinmillis, TimeUnit.SECONDS);
                } else {
                    // Don't retry. propagate the error
                    return Observable.error(error);
                }
            })
        );
})
.subscribe(
    response -> {
        // Handle the successful response
    },
    throwable -> {
        // Handle the final error after retries
    }
);

每当您想要发出 POST 请求时,请使用 requestQueue.onNext(req) 将其排入队列。

© www.soinside.com 2019 - 2024. All rights reserved.