context.sleep()
pauses workflow execution for a specified duration.
When a workflow is paused, the current request completes and a new one is automatically scheduled to resume after the delay.
This ensures no compute resources are consumed during the sleep period.
Always await
a sleep
step to properly pause execution.
Arguments
A unique identifier for the step.
The duration to pause workflow execution.
- Human-readable string format:
Input | Duration |
---|
"10s" | 10 seconds |
"1m" | 1 minute |
"30m" | 30 minutes |
"2h" | 2 hours |
"1d" | 1 day |
"1w" | 1 week |
"1mo" | 1 month |
"1y" | 1 year |
- Numeric format (seconds):
Input | Duration |
---|
60 | 60 seconds (1 minute) |
3600 | 3600 seconds (1 hour) |
86400 | 86400 seconds (1 day) |
Usage
import { serve } from "@upstash/workflow/nextjs";
import { signIn, sendEmail } from "@/utils/onboarding-utils";
export const { POST } = serve<User>(async (context) => {
const userData = context.requestPayload;
const user = await context.run("sign-in", async () => {
const signedInUser = await signIn(userData);
return signedInUser;
});
// 👇 Wait for one day (in seconds)
await context.sleep("wait-until-welcome-email", "1d");
await context.run("send-welcome-email", async () => {
return sendEmail(user.name, user.email);
});
});