Skip to content

定时任务 ​

插件应用可以通过 utools.requestSchedule() 向用户请求创建定时任务。用户允许后,uTools 会按照任务的触发规则执行任务,并在触发时通过 onScheduleTrigger 通知插件应用。

utools.requestSchedule(schedule) ​

向用户请求创建定时任务。

注意

requestSchedule() 仅用于请求创建定时任务,最终是否创建由用户决定。

用户允许创建后,当达到任务触发条件时,uTools 会触发 onScheduleTrigger 事件。插件应用需要根据任务的 code 在事件回调中执行对应的任务逻辑。

Promise 表示请求流程完成,不代表定时任务一定创建成功。用户拒绝创建时,任务不会生成。

详情参考 onScheduleTrigger 事件

类型定义 ​

ts
function requestSchedule(schedule: Schedule): Promise<void>;

参数 ​

  • schedule: 定时任务配置。
Schedule 类型定义
ts
/**
 * 请求创建的定时任务配置
 */
interface Schedule {
  /**
   * 任务唯一标识
   *
   * 用于在 onScheduleTrigger 事件中识别具体任务
   */
  code: string;
  /**
   * 任务名称
   *
   * 用于向用户展示
   */
  label: string;
  /**
   * 任务触发规则
   *
   * - 传入时间戳:一次性任务,在指定时间触发一次后自动删除
   * - 传入 ScheduleTrigger:重复任务,按 Cron 规则重复触发
   */
  trigger: number | ScheduleTrigger;
}
ts
/**
 * 重复任务触发规则
 *
 * 按 Cron 规则重复触发
 */
interface ScheduleTrigger {
  /**
   * Cron 表达式
   *
   * 仅支持标准 5 位 Cron 格式:分 时 日 月 周
   */
  cron: string;
  /**
   * 可选,任务开始生效时间
   *
   * Unix 时间戳,单位为毫秒,该时间之前不会触发任务
   */
  startTime?: number;
  /**
   * 可选,任务结束生效时间
   *
   * Unix 时间戳,单位为毫秒,超过该时间后不再触发任务,并自动删除
   */
  endTime?: number;
}

触发规则 ​

trigger 支持以下两种形式:

一次性任务 ​

直接传入 Unix 时间戳,任务在指定时间触发一次。任务结束后会自动删除。

js
utools.requestSchedule({
  code: 'once-test',
  label: '一次性任务测试',
  trigger: Date.now() + 60000
});

重复任务 ​

传入 ScheduleTrigger,按照 Cron 表达式重复触发。

例如,每天 9:00 至 18:00,每小时触发一次:

js
utools.requestSchedule({
  code: 'drink-water',
  label: '提示喝水',
  trigger: {
    cron: '0 9-18 * * *'
  }
});

如果指定了 startTime 和 endTime,任务仅在该时间范围内按照 Cron 规则触发。

例如,仅在 2026 年 9 月 1 日至 9 月 30 日期间,每天 9:00 触发:

js
utools.requestSchedule({
  code: 'daily-report',
  label: '每日生成报告',
  trigger: {
    cron: '0 9 * * *',
    startTime: new Date('2026-09-01 00:00:00').getTime(),
    endTime: new Date('2026-09-30 23:59:59').getTime()
  }
});

超过 endTime 后,定时任务会自动删除。

处理任务触发 ​

定时任务触发后,uTools 会调用通过 utools.onScheduleTrigger() 注册的回调,并传入任务 code。

插件应用应根据 code 判断需要执行的任务逻辑:

js
utools.onScheduleTrigger(({ code }) => {
  if (code === 'once-test') {
    utools.showNotification('一次性任务通知');
    return;
  }

  if (code === 'drink-water') {
    utools.showNotification('该去喝水啦');
  }
});

建议为每个定时任务使用具有明确含义且稳定的 code。

TIP

任务执行结果根据 onScheduleTrigger 回调状态判断:

  • 回调正常完成,记录为成功。
  • 回调抛出异常或返回 rejected Promise,记录为失败。

执行结果会更新 successCount、failureCount 和 lastExecuteAt。

utools.getSchedules() ​

获取当前插件应用已创建的定时任务列表。

类型定义 ​

ts
function getSchedules(): ScheduleInfo[];
ScheduleInfo 类型定义
ts
/**
 * 已创建的定时任务信息
 */
interface ScheduleInfo {
  /**
   * 任务唯一标识
   */
  code: string;
  /**
   * 任务名称
   */
  label: string;
  /**
   * 任务触发规则
   */
  trigger: number | ScheduleTrigger;
  /**
   * onScheduleTrigger 回调正常完成的次数
   */
  successCount: number;
  /**
   * onScheduleTrigger 回调执行过程中抛出异常或返回 rejected Promise 的次数
   */
  failureCount: number;
  /**
   * 最近一次执行时间
   *
   * Unix 时间戳,单位为毫秒,未执行过时不存在
   */
  lastExecuteAt?: number;
  /**
   * 最近一次任务执行状态
   *
   * success 表示执行成功,failure 表示执行失败
   */
  lastStatus?: 'success' | 'failure';
}

示例 ​

js
const schedules = utools.getSchedules();
console.log(schedules)

utools.removeSchedule(code) ​

删除指定的定时任务。如果任务不存在,将抛出异常。

类型定义 ​

ts
function removeSchedule(code:string): void;

参数 ​

  • code: 要删除的任务唯一标识。

示例 ​

js
utools.removeSchedule('once-test');