短版:
在火力地堡交易(在Java中),如果我从MutableData.getValue()
得到意外的或不一致的(过时)值,应该怎么错误检查并确保该交易如果有必要重复运行?我何时使用Transaction.abort()
vs Transaction.success()
?Firebase java:在交易错误期间,我应该返回Transaction.abort()vs Transaction.success(...)吗?
长版:
我想用Java写了一个火力地堡交易是
检查值“foo”被存储在一个位置,记录错误,如果它是不同的或失踪,然后
将值更新为“bar”。
我们预计“foo”位于该位置,因为它是在事务运行前由同一个客户端成功写入的。
考虑以下几点:
public Transaction.Result doTransaction(MutableData data) {
String value = (String) data.getValue();
if(value == null || !Transaction.equals("foo")) {
return Transaction.abort();
}
data.setValue("bar");
return Transaction.success(data);
}
我知道data.getValue()
可能因为火力地堡的最终一致性返回过时的值(包括null
),因此该交易可能需要多次执行。但是,如果我在if
声明中返回Transaction.abort()
,似乎该交易只运行一次。如果我用Transaction.success(data)
替换它,我会不会承诺错误的价值?如何检测值何时实际为空或“富”?
这看起来大致正确。当设置的操作不再适用时(即数据中的某个值以不再适合的方式更改),应使用Transaction.abort()。在其他所有情况下,.success()是合适的选择。正如你发现的,onComplete()是完成所有应该只运行一次的成功工作的正确地点。 – Kato 2014-09-30 02:51:02
@Kato有什么特别的错,或者只是措辞或什么? (只是想了解更多:]) – 2014-09-30 07:19:35