| short_description | How to delay a workflow's execution with Node.js. |
|---|---|
| thumbnail | https://res.cloudinary.com/pipedreamin/image/upload/v1646841376/docs/icons/icons8-time-96_kupxpi.png |
Use $.flow.delay to delay a step in a workflow.
These docs show you how write Node.js code to handle delays. If you don't need to write code, see our built-in delay actions.
[[toc]]
$.flow.delay takes one argument: the number of milliseconds you'd like to pause your workflow until the next step executes. {{$site.themeConfig.DELAY_MIN_MAX_TIME}}.
Note that delays happen at the end of the step where they're called.
export default defineComponent({
async run({ steps, $ }) {
// Delay a workflow for 60 seconds (60,000 ms)
$.flow.delay(60 * 1000)
// Delay a workflow for 15 minutes
$.flow.delay(15 * 60 * 1000)
// Delay a workflow based on the value of incoming event data,
// or default to 60 seconds if that variable is undefined
$.flow.delay(steps.trigger.event?.body?.delayMs ?? 60 * 1000)
// Delay a workflow a random amount of time
$.flow.delay(Math.floor(Math.random() * 1000))
})
});Both the built-in Delay actions and $.flow.delay return a cancel_url and resume_url that lets you cancel or resume paused executions.
These URLs are specific to a single execution of your workflow. While the workflow is paused, you can load these in your browser or send an HTTP request to either:
- Hitting the
cancel_urlwill immediately cancel that execution - Hitting the
resume_urlwill immediately resume that execution early
Since Pipedream pauses your workflow at the end of the step where you run call $.flow.delay, you can send these URLs to third party systems, via email, or anywhere else you'd like to control the execution of your workflow.
import axios from 'axios'
export default defineComponent({
async run({ steps, $ }) {
const { cancel_url, resume_url } = $.flow.delay(15 * 60 * 1000)
// Send the URLs to a system you own
await axios({
method: "POST",
url: `https://example.com`,
data: { cancel_url, resume_url },
});
// Email yourself the URLs. Click on the links to cancel / resume
$.send.email({
subject: `Workflow execution ${steps.trigger.context.id}`,
text: `Cancel your workflow here: ${cancel_url} . Resume early here: ${resume_url}`,
});
})
});
// Delay happens at the end of this stepPipedream pauses your workflow at the end of the step where you call $.flow.delay. This lets you send the cancel_url and resume_url to third-party systems.
export default defineComponent({
async run({ steps, $ }) {
const { cancel_url, resume_url } = $.flow.delay(15 * 60 * 1000)
// ... run any code you want here
})
});
// Delay happens at the end of this stepYou cannot run $.respond after running $.flow.delay. Pipedream ends the original execution of the workflow when $.flow.delay is called and issues the following response to the client to indicate this state:
$.respond() not called for this invocation