in src/QldbSession.ts [54:80]
async executeLambda<Type>(
transactionLambda: (transactionExecutor: TransactionExecutor) => Promise<Type>
): Promise<Type> {
let transaction: Transaction;
let transactionId: string = null;
let onCommit: boolean = false;
try {
transaction = await this._startTransaction();
transactionId = transaction.getTransactionId();
const executor: TransactionExecutor = new TransactionExecutor(transaction);
const returnedValue: Type = await transactionLambda(executor);
onCommit = true;
await transaction.commit();
return returnedValue;
} catch (e) {
const isRetryable: boolean = isRetryableException(e, onCommit);
const isISE: boolean = isInvalidSessionException(e);
if (isISE && !isTransactionExpiredException(e)) {
// Underlying session is dead on InvalidSessionException except for transaction expiry
this._isAlive = false;
} else if (!isOccConflictException(e)) {
// OCC does not need session state reset as the transaction is implicitly closed
await this._cleanSessionState();
}
throw new ExecuteError(e, isRetryable, isISE, transactionId);
}
}