Skip to content

下载任务 Hook

在工作目录的 hooks.js 中可以声明下载任务生命周期 Hook:

js
function onTaskSuccess(ctx) {
  // 仅在任务成功时调用。
}

function onTaskFailed(ctx) {
  // 仅在任务失败时调用,可通过 ctx.error 获取失败原因。
}

function onTaskFinish(ctx) {
  // 任务成功或失败时都会调用。
}

同一任务的调用顺序如下:

  • 成功:onTaskSuccess(ctx)onTaskFinish(ctx)
  • 失败:onTaskFailed(ctx)onTaskFinish(ctx)

这些 Hook 异步执行,不阻塞任务进入终态。某个 Hook 执行失败时会记录警告日志,但不会改变任务状态;onTaskSuccessonTaskFailed 执行失败也不会阻止 onTaskFinish 执行。

ctx 的结构为:

ts
type FinishContext = {
  task: {
    id: number;
    name: string;
    download_dir?: string;
    config: Record<string, unknown>;
  };
  config: Record<string, unknown>;
  metadata: Record<string, unknown>;
  resources: Array<{
    id: number;
    name: string;
    kind: string;
    size: number;
    unique_id: string;
    extra: Record<string, string>;
    endpoints: Array<{
      protocol: string;
      url: string;
    }>;
  }>;
  filePaths: string[];
  downloadDir: string;
  status: "success" | "failed";
  error?: string;
};

失败任务的 filePaths 只包含失败前已完成的资源;没有已完成资源时为空数组。

文件命名 Hook onFilename 的用法参见指定下载的文件名