首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RxJava处理回调

使用RxJava处理回调
EN

Stack Overflow用户
提问于 2016-02-22 18:50:08
回答 1查看 573关注 0票数 3

我正在尝试了解使用RxJava处理特定情况的最佳方法是什么。

我需要返回一个Observable,它处理从安卓AccountManager帐户的删除。不幸的是,这个操作是异步的,它需要一个回调来处理结果。

正因为如此,我以这种方式使用了Observable.create方法:

代码语言:javascript
运行
复制
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);
    });

但是,正如本post中所述,Observable.create在处理背压和取消方面存在不同的问题

因此,问题是,我如何使用Observable.fromCallable (或等效方法)来处理回调(一般情况下)以及处理背压和取消?

EN

回答 1

Stack Overflow用户

发布于 2016-04-11 19:10:23

您可以尝试使用

Observable.defer

代码语言:javascript
运行
复制
return Observable.defer(() -> {
    final Account account = getAccountIfExist();
        if (account == null) {
            return Observable.error(new NoUserFoundException());
        }
 accountManager.removeAccount(account, future -> {
            boolean result = false;
            try {
                result = future.getResult();
            } catch (Exception ex) {
                 return Observable.error(ex);
            }

            if (result) {
                Observable.just(account.name);
            } else {
                return Observable.error(new NoUserFoundException("Cannot remove the account."))
            }
        }, null);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35551661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档