В следующей транзакции Firestore возникает следующее исключение, если условие (someNumber <2) не выполнено: </p>
Исключение:
PlatformException(PlatformException (9, Транзакция провалила все попытки. Каждый документ, считанный в транзакции, также должен быть записан в этой транзакции., Ноль))
Транзакция:
_myFunction({@required docId,}) {
try {
final DocumentReference docRef = Firestore.instance.collection('collection').document(docId);
Firestore.instance.runTransaction(
(tx) async {
DocumentSnapshot snapshot = await tx.get(docRef);
var someNumber = snapshot['someNumber'] ?? 0;
if (snapshot.exists && someNumber < 2) {
await tx.update(
docRef,
{
'someNumber': FieldValue.increment(1),
},
);
} else {
print("someNumber exceeded");
return;
}
},
);
} catch (e) {
print(e);
}
}
Транзакция работает правильно, если someNumber меньше 2. Эта переменная должна быть прочитана внутри транзакции, поскольку два пользователя могут потенциально обновить значение одновременно.