RwibbyR
Convex Community7mo ago
3 replies
Rwibby

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");
    }
  },
});


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 
      };
    }
  },
});
Was this page helpful?