Agent 可以通过调用 this.schedule(when, callback, data)
来调度未来运行的任务,其中 when
可以是延迟、Date
或 cron 字符串;callback
是要调用的函数名,data
是要传递给函数的数据对象。
调度任务可以做用户请求或消息能做的任何事情:发出请求、查询数据库、发送邮件、读写状态:调度任务可以调用您的 Agent 上的任何常规方法。
您可以在 Agent 的任何方法中调用 this.schedule
,并为每个单独的 Agent 调度数万个任务:
import { Agent } from "agents";
export class SchedulingAgent extends Agent { async onRequest(request) { // 处理传入请求 // 调度一个5分钟后的任务 // 调用"checkFlights"方法 let { taskId } = await this.schedule(600, "checkFlights", { flight: "DL264", date: "2025-02-23", }); return Response.json({ taskId }); }
async checkFlights(data) { // 当我们的调度任务运行时被调用 // 我们也可以在这里调用 this.schedule 来调度另一个任务 }}
import { Agent } from "agents";
export class SchedulingAgent extends Agent { async onRequest(request) { // 处理传入请求 // 调度一个5分钟后的任务 // 调用"checkFlights"方法 let { taskId } = await this.schedule(600, "checkFlights", { flight: "DL264", date: "2025-02-23", }); return Response.json({ taskId }); }
async checkFlights(data) { // 当我们的调度任务运行时被调用 // 我们也可以在这里调用 this.schedule 来调度另一个任务 }}
您可以通过多种方式调度任务:
// 调度一个在10秒后运行的任务let task = await this.schedule(10, "someTask", { message: "hello" });
// 调度一个在特定日期运行的任务let task = await this.schedule(new Date("2025-01-01"), "someTask", {});
// 调度一个每10秒运行的任务let { id } = await this.schedule("*/10 * * * *", "someTask", { message: "hello",});
// 调度一个每10秒运行的任务,但只在周一let task = await this.schedule("0 0 * * 1", "someTask", { message: "hello" });
// 取消调度任务this.cancelSchedule(task.id);
// 调度一个在10秒后运行的任务let task = await this.schedule(10, "someTask", { message: "hello" });
// 调度一个在特定日期运行的任务let task = await this.schedule(new Date("2025-01-01"), "someTask", {});
// 调度一个每10秒运行的任务let { id } = await this.schedule("*/10 * * * *", "someTask", { message: "hello",});
// 调度一个每10秒运行的任务,但只在周一let task = await this.schedule("0 0 * * 1", "someTask", { message: "hello" });
// 取消调度任务this.cancelSchedule(task.id);
调用 await this.schedule
返回一个 Schedule
,其中包含任务随机生成的 id
。您可以使用此 id
在将来检索或取消任务。它还提供一个 type
属性,指示调度类型,例如,"scheduled" | "delayed" | "cron"
之一。
您可以使用调度 API 在 Agent 内获取、取消和过滤调度任务:
// 通过 ID 获取特定调度// 如果任务不存在则返回 undefinedlet task = await this.getSchedule(task.id);
// 获取所有调度任务// 返回 Schedule 对象数组let tasks = this.getSchedules();
// 通过 ID 取消任务// 如果任务被取消则返回 true,如果不存在则返回 falseawait this.cancelSchedule(task.id);
// 过滤特定任务// 例如,未来一小时内开始的所有任务let tasks = this.getSchedules({ timeRange: { start: new Date(Date.now()), end: new Date(Date.now() + 60 * 60 * 1000), },});
// 通过 ID 获取特定调度// 如果任务不存在则返回 undefinedlet task = await this.getSchedule(task.id);
// 获取所有调度任务// 返回 Schedule 对象数组let tasks = this.getSchedules();
// 通过 ID 取消任务// 如果任务被取消则返回 true,如果不存在则返回 falseawait this.cancelSchedule(task.id);
// 过滤特定任务// 例如,未来一小时内开始的所有任务let tasks = this.getSchedules({ timeRange: { start: new Date(Date.now()), end: new Date(Date.now() + 60 * 60 * 1000), },});
- @2025 Cloudflare Ubitools
- Cf Repo