У меня проблемы с arangodb.beginTransaction()
. В моих тестах создание транзакции, вызов функции через trx.run()
API и затем прерывание trx
не приводит к откату изменений данных в базе данных. Я не понимаю, что происходит, и документация крайне скудна. Это довольно зловещая, но очень расплывчатая документация:
Если данная функция содержит асинхронную логику, в транзакции будет запущена только синхронная часть функции. Например. при использовании async / await в транзакции будет выполняться только код до первого await.
А как насчет вложенного async / await внутри вызываемой функции async? Например, если у меня есть это:
async runQuery(query) {
try {
const cursor = await this.arangodb.query(query)
return cursor.all()
} catch (error) {
logger.error('ArangoDB query failed', { stack: error })
throw error
}
}
async touchDocument(id, revision) {
const type = await this.getObjectTypeFromId(id)
const collection = await this.getCollection(type, false, true)
const idCollection = await this.getCollection(ID_COLLECTION, false, true)
const touchAql = aql`
LET permanentDocId = DOCUMENT(${idCollection}, ${id}).docId
LET permanentDoc = MERGE( DOCUMENT(permanentDocId), { _rev : ${revision} })
UPDATE permanentDoc WITH permanentDoc in ${collection} OPTIONS { ignoreRevs: false }
RETURN NEW
`
return this.runQuery(touchAql)
}
trx.run(() => this.touchDocument(parentId, parentRevision))
Будет this.arangodb.query()
выполняться внутри транзакции или нет?
database.query()
может вообще не поддерживаться в потоках транзакций: https://www.arangodb.com/docs/stable/http/transaction-stream-transaction.html - person robross0606   schedule 21.01.2020