gpt4 book ai didi

android - RxJava 2.在处理其他不同的项目时延迟重试

转载 作者:行者123 更新时间:2023-11-29 19:08:50 28 4
gpt4 key购买 nike

我有一个 Observable,它从很多来源获取项目:

Source { List<Item> data }

来源和项目之间的关系是多对多的,在不同的来源中,项目可以 self 复制。 Item 是应该上传到服务器的实体,服务器不接受重复项。为了实现这一点,我合并了源并通过它们的 id 区分它们的项目,然后将唯一的项目上传到服务器。如下所示:

Observable.merge(source1(), source2(), source3())
.flatMapIterable(sources -> sources)
.flatMapIterable(source::getItems)
.distinct(item -> item.getId())
.flatMapCompletabale(item -> uploadItem(item))

项目上传可能会出现一些错误,对于其中一些错误,我应该稍后再次尝试上传项目,并在“失败”的项目等待重试时继续其他项目。

我怎样才能推迟重试上传“失败”的项目并在这个项目等待尝试时继续其他项目?

提前致谢!

最佳答案

如果只处理一次上传失败,您可以在最后一步添加一个运算符(operator):

  .flatMapCompletable(item->uploadItem(item))

应该变成

  .flatMapCompletable(item->uploadItem(item)
.retryWhen(throwable ->
throwable.delay(5, TimeUnit.SECONDS)))

编辑:我从 this Dan Lew blog entry 学到了很多关于 retryWhen() 运算符的知识.您会发现几个示例,包括使用 zip() 运算符和 Observable.range(3) 来限制重试次数。

关于android - RxJava 2.在处理其他不同的项目时延迟重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46150942/

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