Run
Use step.run() to run synchronous or asynchronous code as a retriable 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 asyncfunction
- 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 and 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.