gpt4 book ai didi

rx-java - RxJava2 Completable.fromAction() 和 Completable.fromCallable() 的区别?

转载 作者:行者123 更新时间:2023-12-03 20:25:25 31 4
gpt4 key购买 nike

我们什么时候应该使用 Completable.fromAction()我们什么时候应该使用 Completable.fromCallable()是否有特定的用例

从文档看来,两者都做同样的事情,很难注意到它们之间的区别。

Completable.FromAction
enter image description here

Completable.fromCallable
enter image description here

最佳答案

真的没有什么区别。这是代码:

public final class CompletableFromAction extends Completable {

final Action run;

public CompletableFromAction(Action run) {
this.run = run;
}

@Override
protected void subscribeActual(CompletableObserver observer) {
Disposable d = Disposables.empty();
observer.onSubscribe(d);
try {
run.run();
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
if (!d.isDisposed()) {
observer.onError(e);
} else {
RxJavaPlugins.onError(e);
}
return;
}
if (!d.isDisposed()) {
observer.onComplete();
}
}

}


public final class CompletableFromCallable extends Completable {

final Callable<?> callable;

public CompletableFromCallable(Callable<?> callable) {
this.callable = callable;
}

@Override
protected void subscribeActual(CompletableObserver observer) {
Disposable d = Disposables.empty();
observer.onSubscribe(d);
try {
callable.call();
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
if (!d.isDisposed()) {
observer.onError(e);
} else {
RxJavaPlugins.onError(e);
}
return;
}
if (!d.isDisposed()) {
observer.onComplete();
}
}
}


所以代码是完全一样的。我认为它们的存在主要是为了方便 - 如果您已经拥有 Callable你想用 Completable 包裹起来,你可以直接使用它。如果您有 Action,则相同,或 Runnable ( Completable.fromRunnable 也存在)。如果只有一个存在,您必须做一些额外的工作才能将一个转换为另一个。

资料来源:
https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/completable/CompletableFromCallable.java

https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/completable/CompletableFromAction.java

关于rx-java - RxJava2 Completable.fromAction() 和 Completable.fromCallable() 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62450133/

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