Вариант использования: Мне нужно написать в document_1 обновление в document_2 , удалить document_3 и удалить file_4 из file_storage с использованием одной транзакции с использованием транзакций и пакетных записей. Является ли это возможным? По возможности как?
Примечание : Все четыре асинхронных задания c должны быть успешными после завершения ИЛИ все четыре задания должны быть неудачными. Если дело читается и пишется только, это может помочь Транзакции и пакетная запись документации . Но в нашем случае есть задача чтения - загрузки - удаления файла.
Future<void> _runTransaction() async {
firestore.runTransaction((Transaction transaction) async {
final allDocs = await firestore.collection("messages").getDocuments();
final toBeRetrieved =
allDocs.documents.sublist(allDocs.documents.length ~/ 2);
final toBeDeleted =
allDocs.documents.sublist(0, allDocs.documents.length ~/ 2);
await Future.forEach(toBeDeleted, (DocumentSnapshot snapshot) async {
await transaction.delete(snapshot.reference);
});
await Future.forEach(toBeRetrieved, (DocumentSnapshot snapshot) async {
await transaction.update(snapshot.reference, {
"message": "Updated from Transaction",
"created_at": FieldValue.serverTimestamp()
});
});
});
await Future.forEach(List.generate(2, (index) => index), (item) async {
await firestore.runTransaction((Transaction transaction) async {
await Future.forEach(List.generate(10, (index) => index), (item) async {
await transaction.set(firestore.collection("messages").document(), {
"message": "Created from Transaction $item",
"created_at": FieldValue.serverTimestamp()
});
});
});
});
}