从异步放置的域中获取数据的最佳做法是什么?
例如,我想将一些数据写入领域并在事务完成时访问它。这样做的正确方法是什么?
我遇到过,如果我异步地向realm写入数据,我无法从onSuccess
回调访问它,除非我在查询上设置RealmChangeListener
,这会增加一些令人讨厌的样板并且明显不直观。此外,我需要指定我想听的查询。
RealmList<RealmObject> contents = ...;
RealmResults<RealmWrappedContent> realmResults = realm.where(RealmWrappedContent.class)
.equalTo("id", id)
.findAllAsync();
OnSuccess notWorkingOnSuccess = () -> processResults(realmResults); // realmResults are empty
OnSuccess workingOnSuccess = () -> realmResults.addChangeListener(l -> {
processResults(l); // realmResults are valid and ready for access
realmResults.removeChangeListeners();
});
realm.executeTransactionAsync(bgRealm ->
bgRealm.copyToRealmOrUpdate(contents), notWorkingOnSuccess, onError) // if we try to access realmResults here, they will be empty
realm.executeTransactionAsync(bgRealm ->
bgRealm.copyToRealmOrUpdate(contents), workingOnSuccess, onError) // works fine
所以,问题是:
如何在将数据放入数据库后立即访问它们(而不是陷入回调地狱)?
我们在项目中大量使用RxJava。也许它可以用于帮助情况?我还在想,如果executeTransactionAsync
可以返回RealmResults
,那么事情就会变得更加容易。