- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Observable 可以发出项目并将它们上传到服务器。
代码如下:
repository
.getItems()
.doOnComplete(() -> Log.d(TAG, "No items left."))
.flatMapCompletable(item ->
repository
.uploadItems(item)
.onErrorComplete()
.andThen(
deleteTemporaryItem()
.onErrorComplete()
)
);
getItems 方法逐个发出项目然后完成,uploadItems 方法将它们上传到服务器。问题是当没有项目时所有链 onComplete 事件都正常工作并且我的所有订阅者都收到此事件并继续它但是当有一些项目并且所有这些都被上传时 onComplete 事件不会比 .doOnComplete(() -> Log.d(TAG, "No items left.")) 方法,所有订阅者都不会收到此事件。我添加了 onErrorComplete 以确保 uploadItems 完成后的所有方法,我还在日志中看到所有方法都已完成,但来自 repository.getItems() 的 onComplete 事件并未发送给所有订阅者。
谁能帮忙找出造成这种行为的原因?
提前致谢!
最佳答案
请看这个例子:
我通过每个步骤传递项目,因此订阅者将收到有关已处理的每个项目的通知。处理管道涉及上传和删除文件。
请尝试更改实现并发布输出日志。
@Test
void name() throws Exception {
Flowable<Integer> completed_work = Flowable.just(1, 2, 3)
.map(integer -> integer * 1000)
.flatMapSingle(integer ->
Completable.fromAction(() -> {
Thread.sleep(integer);
// do upload stuff here
})
.doOnComplete(() -> System.out.println("Uploaded file ...."))
//.timeout(10, TimeUnit.SECONDS)
.retry(3)
.andThen(
Completable.fromAction(() -> {
// do delete stuff...
})
.retry(2)
//.timeout(10, TimeUnit.SECONDS)
.doOnComplete(() -> System.out.println("Deleted file ..."))
)
.toSingle(() -> integer)
)
.doOnComplete(() -> System.out.println("Completed work"));
completed_work.test()
.await()
.assertResult(1000, 2000, 3000);
}
关于android - 带有 flatMapCompletable 的 RxJava 2 Observable 未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545574/
我期待 flatMapCompletable 会在 Completable 正常完成时调用给定的 Action。但是,它并不像我想的那样工作。这是一个简单的例子: PublishProcess
我有一个 Observable 可以发出项目并将它们上传到服务器。 代码如下: repository .getItems() .doOnComplete
我试图将一个可完成链接到我的 Rx 链中,当我这样做时,链永远不会在 onError 或 onComplete 中完成。 当我单步执行代码时,会执行我的可完成代码。我什至可以添加日志记录并查看它登录它
我是一名优秀的程序员,十分优秀!