我在Firebase上运行一个事务,在事务中我因为非规范化而更新了多个位置。
其中一个更新应该仅在引用存在的情况下,否则,它不应该写入。
据我所知,使用setValueChangedListener是异步的,因此事务将在可以检查值之前结束。
我该怎么做?或者我必须在开始交易之前检查这个值吗?
这是删除非重要事项的方法:
然后我想更新另一个对象的用户,但仅限于对象存在,因为它可以每天更改。
@Override public Transaction.Result doTransaction(MutableData mutableData) {
User user = mutableData.getValue(User.class);
if (user == null) {
Log.e(TAG, "User " + userId + " was locally null");
return Transaction.success(mutableData);
}
user.couponCode = code.key; //gotten from before
//add code address to user
user.addresses = new HashMap<String, Address>();
user.addresses.put(code.key,code.address);
Database.child(Constants.FB_HOUSES).child(code.address.key).child(Constants.FB_RESIDENTS).child(user.key).setValue(user.getUserResidentObject());
//Add new resident to tasks if any
*** HERE I WANT TO QUERY OTHER PATH TO DO SOMETHING
mutableData.setValue(user);
return Transaction.success(mutableData);
}