我是rx java的新手,我无法理解Completable.defer
带来的好处以及为什么使用它是一种好习惯。
所以,两者之间有什么区别
public Completable someMethod1() {
return Completable.defer(() -> someMethod2());
}
vs
public Completable someMethod1() {
return someMethod2();
}
我可以看到在该方法的实现中有一些异常处理,但这已经超越了我。 赞赏。
答案 0 :(得分:1)
Defer将确保每个订户可以独立于其他订户而获得自己的源序列。让我用两个例子来说明它:
AtomicInteger index = new AtomicInteger();
Flowable<String> source =
Flowable.just("a", "b", "c", "d", "e", "f")
.map(v -> index.incrementAndGet() + "-" + v)
;
source.subscribe(System.out:println);
source.subscribe(System.out:println);
打印
1-a
2-b
3-c
4-d
5-e
6-f
7-a
8-b
9-c
10-d
11-e
12-f
与
Flowable<String> source =
Flowable.defer(() -> {
AtomicInteger index = new AtomicInteger();
return Flowable.just("a", "b", "c", "d", "e", "f")
.map(v -> index.incrementAndGet() + "-" + v)
;
})
;
source.subscribe(System.out:println);
source.subscribe(System.out:println);
打印
1-a
2-b
3-c
4-d
5-e
6-f
1-a
2-b
3-c
4-d
5-e
6-f
在第二个示例中,存在每个订户状态,否则将在所有订户之间共享。现在,由于每个订户都有自己创建的序列,因此两个索引项都像人们通常期望的那样。