53 lines
1.5 KiB
Plaintext
53 lines
1.5 KiB
Plaintext
---
|
|
title: "Wait until"
|
|
description: "Wait until a date, then continue execution."
|
|
---
|
|
|
|
import PausedExecutionFree from "/snippets/paused-execution-free.mdx"
|
|
|
|
This example sends a reminder email to a user at the specified datetime.
|
|
|
|
```ts /trigger/reminder-email.ts
|
|
export const sendReminderEmail = task({
|
|
id: "send-reminder-email",
|
|
run: async (payload: { to: string; name: string; date: string }) => {
|
|
//wait until the date
|
|
await wait.until({ date: new Date(payload.date) });
|
|
|
|
//todo send email
|
|
const { data, error } = await resend.emails.send({
|
|
from: "hello@trigger.dev",
|
|
to: payload.to,
|
|
subject: "Don't forget…",
|
|
html: `<p>Hello ${payload.name},</p><p>...</p>`,
|
|
});
|
|
},
|
|
});
|
|
```
|
|
|
|
This allows you to write linear code without having to worry about the complexity of scheduling or managing cron jobs.
|
|
|
|
<PausedExecutionFree />
|
|
|
|
## `throwIfInThePast`
|
|
|
|
You can optionally throw an error if the date is already in the past when the function is called:
|
|
|
|
```ts
|
|
await wait.until({ date: new Date(date), throwIfInThePast: true });
|
|
```
|
|
|
|
You can of course use try/catch if you want to do something special in this case.
|
|
|
|
## Wait idempotency
|
|
|
|
You can pass an idempotency key to any wait function, allowing you to skip waits if the same idempotency key is used again. This can be useful if you want to skip waits when retrying a task, for example:
|
|
|
|
```ts
|
|
// Specify the idempotency key and TTL when waiting until a date:
|
|
await wait.until({
|
|
date: futureDate,
|
|
idempotencyKey: "my-idempotency-key",
|
|
idempotencyKeyTTL: "1h",
|
|
});
|
|
``` |