Failure handlers
If your function exhausts all of its retries, it will be marked as "Failed." You can handle this circumstance by providing an onFailure
handler when defining your function.
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:
inngest.createFunction(
{
id: "update-subscription",
retries: 5,
onFailure: async ({ event, error }) => {
// if the subscription check fails after all retries, unsubscribe the user
await unsubscribeUser(event.data.userId);
},
},
{ event: "user/subscription.check" },
async ({ event }) => { /* ... */ },
);
Internally, this handler creates a second function that listens for the inngest/function.failed
event, which you can listen to yourself to capture all failed runs across your system.
inngest.createFunction(
{ id: "handle-any-fn-failure" },
{ event: "inngest/function.failed" },
async ({ event }) => { /* ... */ },
);
To handle cancelled function runs, checkout out this example that uses the inngest/function.cancelled
system event.