FireStore с использованием транзакции дважды в той же функции - PullRequest
0 голосов
/ 27 мая 2019

Мне любопытно, если нет недостатка, когда я использую метод транзакции внутри метода транзакции на 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 Ответ

1 голос
/ 27 мая 2019

Я бы настоятельно рекомендовал против этого. Транзакции могут быть повторены, если есть конфликт с другим клиентом, также выполняющим транзакцию с любым из тех же документов. Следует ожидать, что тело транзакции может выполняться более одного раза. Это означает, что ваша внутренняя транзакция может быть выполнена более одного раза, что почти наверняка не даст желаемого эффекта. Могут быть и другие побочные эффекты, которые нежелательны. Например, что, по вашему мнению, произойдет, если внутренняя транзакция пытается выполнить транзакцию с любым из тех же документов, что и внешняя транзакция?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...