Можно ли одновременно запускать транзакции и пакетные записи для Firestore и Firebase-Storage? - PullRequest
0 голосов
/ 26 апреля 2020

Вариант использования: Мне нужно написать в 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()
      });
    });
  });
});

} ​​

1 Ответ

1 голос
/ 26 апреля 2020

Во время записи вы не можете включать операции записи в Firestore с операциями записи в Cloud Storage в одну операцию атома c.

Как вы уже упоминали, вы можете использовать пакетную запись для записи. / update / delete операции в Firestore, и это будут атомы c, но вы не можете включить запись в хранилище.


Вы можете создать свой собственный механизм, который регулярно проверяет это для каждого файла в облачном хранилище в Firestore есть соответствующая конфигурация (документы правильно обновлены, удалены и т. д. c ...) и наоборот. Просто предложение (очень) хакерского обходного пути ...

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