Skip to content

Documentation / @andrew_l/mongo-transaction / withTransactionControlled

Function: withTransactionControlled()

withTransactionControlled<T, K, Args>(fn): TransactionControlled<Awaited<T>, K, Args>

Wraps a function and returns a TransactionControlled interface, allowing manual control over transaction commit and rollback operations.

This provides finer-grained control over the transaction lifecycle, enabling users to explicitly commit or rollback a transaction based on custom logic. It's especially useful in scenarios where transactional state or conditions need to be externally determined.

Type Parameters

T

K = any

Args extends any[] = any[]

Parameters

fn

Returns

TransactionControlled<Awaited<T>, K, Args>

Example

ts
const t = withTransactionControlled(async (userId) => {
  await useTransactionEffect(async () => {
    await db.users.updateById(userId, { premium: true });

    return () => db.users.updateById(userId, { premium: false })
  });

  const user = await db.users.findById(userId);

  return user;
});

await t.run();

// Remove premium when no subscriptions
if (t.result.activeSubscriptions > 0) {
  await t.commit();
} else {
  await t.rollback();
}