All files / lib/transaction transaction.lib.ts

0% Statements 0/12
0% Branches 0/2
0% Functions 0/3
0% Lines 0/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23                                             
type OptimisticLockTransactionBody = (onLockFailure: () => void) => Promise<void>;
 
export const optimisticLockTransaction = async (
  retryTime,
  transactionBody: OptimisticLockTransactionBody,
) => {
  const lockFailure = () => {
    throw new Error("Optimistic Lock Failure");
  };
 
  let lastError = null;
  let tryTime = 0;
  while (tryTime++ < retryTime) {
    try {
      return await transactionBody(lockFailure);
    } catch (e) {
      e.lastError = lastError;
      lastError = e;
    }
  }
  throw lastError || new Error("Optimistic Lock Failure");
};