是否有一种在逻辑中途取消/回滚异步领域事务的好方法?

时间:2018-08-21 10:26:01

标签: java android realm

我一直在浏览领域文档,发现没有可行的方法可以从事务“主体”即Realm.Transaction.execute()

中取消异步事务。

因此,如果我想使用executeTransactionAsync() API,我似乎唯一的求助方法就是:

realm.executeTransactionAsync(
    new Realm.Transaction() {
        @Override
        public void execute(@NonNull Realm realm) {
            // pretend we have some inter dependent database operations here
            if (failureCondition) {
                throw new Error("Failed transaction");
            }

            // and more here... 
        }
    }, 
    new Realm.Transaction.OnError() {
        @Override
        public void onError(@NonNull Throwable error) {
            Log.e(LOG_TAG, error.getMessage());
        }
    }
);

真的没有更好的方法吗?如果对操作进行重新排序以使简单的退货就足够了,并且可以部分落实交易,那么这显然是我会做的选择,但是如果我做不到,该怎么办。

当然,以上内容在技术上与在execute()中仅调用realm.cancelTransaction()相同,因为它会导致尝试提交不再存在的事务以引发异常。但是,从以下事实来看,这个漂亮的API背后的实际异步事务代码在尝试提交之前不与realm.isInTransaction()进行检查,也不允许execute()抛出任何检查的异常,这两种方法似乎都不是设计人员甚至考虑的事情有效的用例。

我想最后我会回答自己,所以也许更好的问题是……这是API本身的设计上的问题还是我只是在尝试做一些根本上错误的事情。

0 个答案:

没有答案