async executeLambda()

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);
        }
    }