我们什么时候应该使用 Completable.fromAction()
我们什么时候应该使用 Completable.fromCallable()
是否有特定的用例
从文档看来,两者都做同样的事情,很难注意到它们之间的区别。
Completable.FromAction
Completable.fromCallable
最佳答案
真的没有什么区别。这是代码:
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/