使用RxJava处理回调函数

3

我正在尝试理解使用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 在处理背压和取消方面存在不同的问题,正如这篇帖子中所述。

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

1个回答

1
你可以尝试使用 <\p>。

Observable.defer

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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接