TypeScript SDK v4 is now available! See what's new

Failure handlers

If your function exhausts all of its retries, it will be marked as "Failed." You can handle this circumstance by either providing an onFailure/on_failure handler when defining your function, or by listening for the inngest/function.failed system event.

The first approach is function-specific, while the second covers all function failures in a given Inngest environment.

Examples

The example below checks if a user's subscription is valid a total of six times. If you can't check the subscription after all retries, you'll unsubscribe the user:

/* Option 1: give the inngest function an `onFailure` handler. */
inngest.createFunction(
  {
    id: "update-subscription",
    triggers: { event: "user/subscription.check" },
    retries: 5,
    onFailure: async ({ event, error }) => {
      // if the subscription check fails after all retries, unsubscribe the user
      await unsubscribeUser(event.data.userId);
    },
  },
  async ({ event }) => { /* ... */ },
);
/* Option 2: Listens for the [`inngest/function.failed`](/docs/reference/functions/handling-failures#the-inngest-function-failed-event) system event to catch all failures in the inngest environment*/
inngest.createFunction(
  { id: "handle-any-fn-failure", triggers: { event: "inngest/function.failed" } },
  async ({ event }) => { /* ... */ },
);

To handle cancelled function runs, checkout out this example that uses the inngest/function.cancelled system event.