← Cloudflare Workers / workers / runtime-apis / handlers
Naplánovaný handler
Kontext
Když je Worker vyvolán přes Cron Trigger, scheduled() handler zpracovává vyvolání.
Syntaxe
export default {
async scheduled(controller, env, ctx) {
await doSomeTaskOnASchedule();
},
};interface Env {}
export default {
async scheduled(
controller: ScheduledController,
env: Env,
ctx: ExecutionContext,
) {
await doSomeTaskOnASchedule();
},
};from workers import WorkerEntrypoint
class Default(WorkerEntrypoint):
async def scheduled(self, controller, env, ctx):
# controller.cron contains the cron pattern that triggered this event
# controller.scheduledTime contains the scheduled time in ms since epoch
print(f"Cron triggered: {controller.cron}")Vlastnosti
-
controller.cronstring- Hodnota Cron Trigger která spustila
ScheduledEvent.
- Hodnota Cron Trigger která spustila
-
controller.typestring- Typ kontroleru. Vždy vrací
"scheduled".
- Typ kontroleru. Vždy vrací
-
controller.scheduledTimenumber- Čas, kdy
ScheduledEventměla být spuštěna v milisekundách od January 1, 1970, UTC. Lze ji analyzovat jakonew Date(controller.scheduledTime).
- Čas, kdy
-
envobjekt- Objekt obsahující bindings přiřazené k vašemu Workeru ve formátu ES modules, jako jsou KV namespaces a Durable Objects.
-
ctxobjekt- Objekt obsahující kontext přiřazený k vašemu Workeru ve formátu ES modules. V současnosti tento objekt obsahuje pouze
waitUntil.
- Objekt obsahující kontext přiřazený k vašemu Workeru ve formátu ES modules. V současnosti tento objekt obsahuje pouze
Zpracování více cron triggerů
Když nakonfigurujete více Cron Triggers pro jeden Worker, každý spouštěč volá stejný scheduled() handler. Použijte controller.cron abyste rozlišili, který plán se spustil, a pro každý z nich spustili jinou logiku.
{
"triggers": {
"crons": ["*/5 * * * *", "0 0 * * *"],
},
}[triggers]
crons = [ "*/5 * * * *", "0 0 * * *" ]export default {
async scheduled(controller, env, ctx) {
switch (controller.cron) {
case "*/5 * * * *":
await fetch("https://example.com/api/sync");
break;
case "0 0 * * *":
await env.MY_KV.put("last-cleanup", new Date().toISOString());
break;
}
},
};export default {
async scheduled(
controller: ScheduledController,
env: Env,
ctx: ExecutionContext,
) {
switch (controller.cron) {
case "*/5 * * * *":
await fetch("https://example.com/api/sync");
break;
case "0 0 * * *":
await env.MY_KV.put("last-cleanup", new Date().toISOString());
break;
}
},
} satisfies ExportedHandler<Env>;from workers import WorkerEntrypoint, fetch
from datetime import datetime, timezone
class Default(WorkerEntrypoint):
async def scheduled(self, controller, env, ctx):
if controller.cron == "*/5 * * * *":
await fetch("https://example.com/api/sync")
elif controller.cron == "0 0 * * *":
await env.MY_KV.put("last-cleanup", datetime.now(timezone.utc).isoformat())Hodnota controller.cron je přesný řetězec cron výrazu z vaší konfigurace. Musí se shodovat znak po znaku, včetně mezer.
Metody
Když je skript Workeru vyvolán přes Cron Trigger, runtime Workers spustí ScheduledEvent což bude zpracováno scheduled funkci ve třídě modulu Workers. ctx argument představuje kontext, ve kterém vaše funkce běží, a obsahuje následující metody pro řízení toho, co se stane dále:
ctx.waitUntil(promise): void - Tuto metodu použijte k registraci asynchronních úloh (například protokolování, analytiku u služeb třetích stran, streamování nebo ukládání do mezipaměti), které se mají dokončit před dokončením volání. Prvníctx.waitUntilselže, bude sledováno a zaznamenáno jako stav v Cron Trigger tabulky Past Events. Jinak to bude nahlášeno jako úspěch.