什么时候用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以代码是完全一样的。我认为它们的存在主要是为了方便 - 如果您已经有 aCallable想要包装在 a 中Completable,则可以直接使用它。如果您有Action, 或Runnable(Completable.fromRunnable也存在),则相同。如果只有一个存在,您必须做一些额外的工作才能将一个转换为另一个。
来源:https : //github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/completable/CompletableFromCallable.java
| 归档时间: |
|
| 查看次数: |
2911 次 |
| 最近记录: |