Rwibby
Rwibby5d ago

Recommended way to handle mutation responses

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");
}
},
});
// 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
};
}
},
});
// 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
};
}
},
});
1 Reply
Convex Bot
Convex Bot5d ago
Thanks for posting in <#1088161997662724167>. Reminder: If you have a Convex Pro account, use the Convex Dashboard to file support tickets. - Provide context: What are you trying to achieve, what is the end-user interaction, what are you seeing? (full error message, command output, etc.) - Use search.convex.dev to search Docs, Stack, and Discord all at once. - Additionally, you can post your questions in the Convex Community's <#1228095053885476985> channel to receive a response from AI. - Avoid tagging staff unless specifically instructed. Thank you!

Did you find this page helpful?