gpt4 book ai didi

Android 将特定 API 调用限制为 3 秒内一次

转载 作者:行者123 更新时间:2023-12-04 12:19:08 25 4
gpt4 key购买 nike

我要限制/test API 调用将在 3 秒内调用一次,例如:

2021-09-21 14:09:19.920 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.031 V/OkHttp: <-- 200 https://xxx/test (109ms)
2021-09-21 14:09:20.038 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.136 V/OkHttp: <-- 200 https://xxx/test (96ms)
2021-09-21 14:09:20.146 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.315 V/OkHttp: <-- 200 https://xxx/test (168ms)
2021-09-21 14:09:20.325 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.499 V/OkHttp: <-- 200 https://xxx/test (172ms)
2021-09-21 14:09:20.514 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.615 V/OkHttp: <-- 200 https://xxx/test (100ms)
2021-09-21 14:09:20.628 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.721 V/OkHttp: <-- 200 https://xxx/test (91ms)
2021-09-21 14:09:20.734 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.827 V/OkHttp: <-- 200 https://xxx/test (87ms)
将被调用一次:
2021-09-21 14:09:19.920 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.031 V/OkHttp: <-- 200 https://xxx/test (109ms)
出于测试目的,我正在做:
repeat(10) { index ->
apiRepo.test() //Returns Single
.toObservable()
.debounce(3, TimeUnit.SECONDS)
.subscribe({}, { Timber.e(it) })
}
我来自协程世界,所以我想我误解了 debounce有效,因为我仍然接到 10 个电话(在 2 秒内),而我预计 3 秒内会接到 1 个电话。

最佳答案

您创建一个新的 debounce十次。这就是为什么它没有按预期工作的原因。
要实现您想要的,您可以使用 发布主题 .

val apiCallSubject = PublishSubject.create<Unit>()

apiCallSubject
.debounce(3, TimeUnit.SECONDS)
.flatMapSingle { apiRepo.test() }
.subscribe({}, { Timber.e(it) })

repeat(10) { apiCallSubject.onNext(Unit) }
关键是你去抖动的 Observable 必须发射多个项目。
在你的情况下,它只发出一但十次。

关于Android 将特定 API 调用限制为 3 秒内一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69267987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com