Я пытаюсь прочитать документ с помощью транзакции и обновить тот же документ без транзакции, если выполняется определенное условие. Поэтому я ожидаю, что транзакция завершится неудачно (, потому что точка транзакции, если я прав, будет atomi c, иначе говоря, сбой, если прочитанный документ изменился во время транзакции ) и задача записи (без транзакции) для успешного завершения.
Однако код здесь просто зависает навсегда.
Как достичь моих ожиданий выше? (Или единственный способ - выбросить ошибку вручную ??)
await this.firestoreProvider.fs.runTransaction(async transaction => {
const update = {
foo: 'foo',
}
const test = await transaction.get(this.firestoreProvider.testsRef.doc('test'));
console.log(test.data());
await this.firestoreProvider.testsRef.doc('test').set(update);
// do not continue if the above line caused this transaction to fail
// ... some more writes using the transaction ...
})
В документации сказано:
Транзакция может завершиться неудачно по следующим причинам:
...
Транзакция прочитала документ, который был изменен вне транзакции. В этом случае транзакция автоматически запускается снова. Транзакция повторяется конечное количество раз.
Я пытался установить maxAttempt на 5, но он все равно зависает навсегда.