Run
Use step.run()
to run synchronous or asynchronous code as a retryable step in your function. step.run()
returns a Promise that resolves with the return value of your handler function.
export default inngest.createFunction(
{ id: "import-product-images" },
{ event: "shop/product.imported" },
async ({ event, step }) => {
const uploadedImageURLs = await step.run("copy-images-to-s3", async () => {
return copyAllImagesToS3(event.data.imageURLs);
});
}
);
step.run(id, handler): Promise
- Name
id
- Type
- string
- Required
- required
- Description
The ID of the step. This will be what appears in your function's logs and is used to memoize step state across function versions.
- Name
handler
- Type
- function
- Required
- required
- Description
The function that code that you want to run and automatically retry for this step. Functions can be:
- A synchronous function
- An
async
function - Any function that returns a
Promise
Throwing errors within the handler function will trigger the step to be retried (reference).
// Steps can have async handlers
const result = await step.run("get-api-data", async () => {
// Steps should return data used in other steps
return fetch("...").json();
});
// Steps can have synchronous handlers
const data = await step.run("transform", () => {
return transformData(result);
});
// Returning data is optional
await step.run("insert-data", async () => {
db.insert(data);
});
How to call step.run()
As step.run()
returns a Promise, you will need to handle it like any other Promise in JavaScript. Here are some ways you can use step.run()
in your code:
// Use the "await" keyword to wait for the promise to fulfil
await step.run("create-user", () => {/* ... */});
const user = await step.run("create-user", () => {/* ... */});
// Use `then` (or similar)
step.run("create-user", () => {/* ... */})
.then((user) => {
// do something else
});
// Use with a Promise helper function to run in parallel
Promise.all([
step.run("create-subscription", () => {/* ... */}),
step.run("add-to-crm", () => {/* ... */}),
step.run("send-welcome-email", () => {/* ... */}),
]);
Return values & serialization
All data returned from step.run
is serialized as JSON. This is done to enable the SDK to return a valid serialized response to the Inngest service.
const output = await step.run("create-user", () => {
return { id: new ObjectId(), createdAt: new Date() };
});
/*
{
"id": "647731d1759aa55be43b975d",
"createdAt": "2023-05-31T11:39:18.097Z"
}
*/
Usage limits
See usage limits for more details.