Cloudflare DevelopersCD
Cloudflare Developers7mo ago
64 replies
Marak

using the helper:

using the helper:

export async function withSQLiteTransaction<T>(
  db: any,
  logic: (db: any) => Promise<{ rollback?: boolean; reason?: string; result?: T }>
): Promise<{ success: boolean; result?: T; error?: any; reason?: string }> {
  try {
    await db.prepare?.("BEGIN").run?.() ?? db.exec("BEGIN");

    const { rollback, result, reason } = await logic(db);

    if (rollback) {
      await db.prepare?.("ROLLBACK").run?.() ?? db.exec("ROLLBACK");
      return { success: false, reason };
    }

    await db.prepare?.("COMMIT").run?.() ?? db.exec("COMMIT");
    return { success: true, result };
  } catch (error) {
    await db.prepare?.("ROLLBACK").run?.() ?? db.exec("ROLLBACK");
    return { success: false, error };
  }
}
Was this page helpful?