-
Star
(798)
You must be signed in to star a gist -
Fork
(129)
You must be signed in to fork a gist
-
-
Save t3dotgg/a486c4ae66d32bf17c09c73609dacc5b to your computer and use it in GitHub Desktop.
// Types for the result object with discriminated union | |
type Success<T> = { | |
data: T; | |
error: null; | |
}; | |
type Failure<E> = { | |
data: null; | |
error: E; | |
}; | |
type Result<T, E = Error> = Success<T> | Failure<E>; | |
// Main wrapper function | |
export async function tryCatch<T, E = Error>( | |
promise: Promise<T>, | |
): Promise<Result<T, E>> { | |
try { | |
const data = await promise; | |
return { data, error: null }; | |
} catch (error) { | |
return { data: null, error: error as E }; | |
} | |
} |
I couldn't find an information in the docs about it but here it is being used 👇. It is different than db.execute() orm.drizzle.team/docs/latest-releases/drizzle-orm-v0110
…
On Tue, Jun 17, 2025, 3:06 AM Lucas Cândido @.> wrote: @.* commented on this gist. ------------------------------ For anyone using Drizzle you should add .execute() to the end of your query Isn't execute only for raw queries? — Reply to this email directly, view it on GitHub https://gist.github.com/t3dotgg/a486c4ae66d32bf17c09c73609dacc5b#gistcomment-5620154 or unsubscribe https://github.com/notifications/unsubscribe-auth/AJBP55VUIUH4NI7UR6D2PR33D5LZPBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDUOJ2WLJDOMFWWLO3UNBZGKYLEL5YGC4TUNFRWS4DBNZ2F6YLDORUXM2LUPGBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTGNRVGEYTEOJWU52HE2LHM5SXFJTDOJSWC5DF . You are receiving this email because you commented on the thread. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub .
It's probably only a vestigial API and it's not necessary anymore for a long time, otherwise it would be found somewhere in the docs. So why did you believe execute
is important in select
, insert
, delete
, findFirst
, findMany
, etc. methods?
I was getting an error inside of the tryCatch function. It was something like operation is not a function or something like that. So . execute solved it for me. Edit: - Though it is better to handle this in the tryCatch function. Edit 2: Drizzle has an interesting (at least to me) implementation where if you don’t await, it returns a builder. If you do await, it becomes a Promise. More info about Thenables (MDN) The issue was that I was calling operation(), which returned a builder, not a Promise. So if I’m not wrong, inside the tryCatch block, if I wrap the result with Promise.resolve, it should work.
ts const query = new FakeQuery(['user1', 'user2']); // Treated like a builder console.log('Query object:', query); // Auto-executes on await const result = await query; console.log('Result:', result);
So it's related to the fixes @nazarEnzo applied a few comments above, where he passed the promises to Promise.resolve method. I still haven't used the tryCacth
function with any prisma promise yet, but when I do, I'll come back here if any issue arises.
FYI: My initial answer code wasn't actually working properly for synchronous operations, because the return was always a Promise. Now this is fixed by using custom isPromise
utility (to support non-native promises). Promise.resolve().then()
can totally be replaced with .then()
/**
* Checks if the value is a Promise
* @param value - The value to check
* @returns True if the value is a Promise, false otherwise
*/
export function isPromise<T = any>(value: unknown): value is Promise<T> {
return (
!!value &&
(typeof value === 'object' || typeof value === 'function') &&
typeof (value as any).then === 'function'
);
}
// ----------------
// Test
// ----------------
import prismaClient from 'database/prismaClient';
const userPromise = prismaClient.user.findFirst();
console.log(
userPromise instanceof Promise, // false
isPromise(userPromise) // true
);
Isn't
execute
only for raw queries?