【发布时间】:2016-02-22 10:50:07
【问题描述】:
我正在尝试了解使用 RxJava 处理特定案例的最佳方法。
我需要返回一个 Observable 来处理从 Android AccountManager 中删除帐户的操作。不幸的是,这个动作是异步的,它需要一个回调来处理结果。
正因为如此,我使用Observable.create的方法,是这样的:
return Observable.create(subscriber -> {
final Account account = getAccountIfExist();
if (account == null) {
subscriber.onError(new NoUserFoundException());
return;
}
accountManager.removeAccount(account, future -> {
boolean result = false;
try {
result = future.getResult();
} catch (Exception ex) {
Log.e(TAG, "Remove account not successful : ", ex);
subscriber.onError(ex);
return;
}
if (result) {
subscriber.onNext(account.name);
subscriber.onCompleted();
} else {
subscriber.onError(new RuntimeException("Cannot remove the account."));
}
}, null);
});
但是,Observable.create 在处理背压和取消方面有不同的问题,如post 中所述
所以,问题是,我如何使用Observable.fromCallable(或等效方法)来处理回调(通常)以及处理背压和取消?
【问题讨论】: