Firestore在同一功能中两次使用事务

时间:2019-05-27 19:06:35

标签: firebase google-cloud-firestore

我很好奇我在Android上的交易方法中使用交易方法时是否没有不利之处。

像这样

db.runTransaction(new Transaction.Function<Double>() {
@Override
public Double apply(Transaction transaction) throws 
FirebaseFirestoreException {
    DocumentSnapshot snapshot = transaction.get(sfDocRef);
    double newPopulation = snapshot.getDouble("population") + 1;
    if (newPopulation <= 1000000) {

    db.runTransaction(new Transaction.Function<Double>() {
             ....
    }

    } else {
        throw new FirebaseFirestoreException("Population too high",
                FirebaseFirestoreException.Code.ABORTED);
    }
}

1 个答案:

答案 0 :(得分:1)

我强烈建议您不要这样做。如果与另一个也与任何同一文档执行事务的客户端发生冲突,则可以重试事务。您应该期望事务主体可以运行多次。这意味着您的内部交易可以执行一次以上,几乎可以肯定不会达到您想要的效果。可能还有其他不需要的副作用。例如,如果内部事务试图与外部事务使用任何相同的文档进行事务处理,您会怎么办?