Hey everyone, I've been exploring Convex lately and after reading the docs on mutations I couldn't find an answer for this. What is the recommended way to handle success/error responses from my mutations? Should I just include a try/catch in the handler function like this?
// mutations/myMutation.ts
import { mutation } from "./_generated/server";
export const createUser = mutation({
args: { name: v.string(), email: v.string() },
handler: async (ctx, args) => {
try {
// Your mutation logic
const userId = await ctx.db.insert("users", {
name: args.name,
email: args.email,
});
return { success: true, userId };
} catch (error) {
// Handle the error
console.error("Failed to create user:", error);
throw new Error("Failed to create user");
}
},
});
Or should I return a value and handle the error in the mutation call like this?
// mutations/myMutation.ts
export const createUserSafe = mutation({
args: { name: v.string(), email: v.string() },
handler: async (ctx, args) => {
try {
const userId = await ctx.db.insert("users", {
name: args.name,
email: args.email,
});
return {
success: true,
data: { userId },
error: null
};
} catch (error) {
return {
success: false,
data: null,
error: error.message
};
}
},
});