Как мне сделать несколько наборов в транзакции? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь запустить транзакцию в моем приложении firebase / angular 6, и оно не работает.

Вот что у меня есть:

try {
  const transactionResult = await db.runTransaction(async trans => {

  let groupRecords: any[] = [];
  for (var i = 0; i < groupIDs.length; i++) {
    const groupDocRef = db.collection('Groups').doc(groupIDs[i]);
    const groupDoc = await trans.get(groupDocRef);
    groupRecords.push(groupDoc);
  }

  for (var i = 0; i < groupRecords.length; i++) {
    const groupData = groupRecords[i].data();
    await trans.set(groupRecords[i].ref, groupData, {merge: true});
  };

  return trans.commit();
} catch (err) {
  console.log('Error updating groups:', err);

  return Promise.reject('Error updating groups: ' + err);
}

return trans.commit();

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

Обычно, когда я делаю транзакцию, явернуть результаты trans.set (…), и это работает.На этот раз я не могу этого сделать.На этот раз я обновляю набор групп.Сначала я делаю все мои удары (в первом цикле for), а затем делаю все свои подходы (во втором цикле for).Я не возвращаю эти наборы, поскольку хочу, чтобы цикл for завершился для всех из них.Единственное, о чем я могу думать, когда наборы сделаны, это сделать коммит.Отсюда: return trans.commit().<- Но это, кажется, приводит к повторным запускам транзакции, завершающейся ошибкой. </p>

Как можно вернуть соответствующий объект в транзакции так, что транзакция работает (т.е. не повторяется, невыбросить истекшую / недопустимую ошибку, может откатиться, если что-то пойдет не так и т. д.), когда нужно было сделать несколько подходов?

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