For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/llms-full.txt, and this page is available as Markdown at https://open-spaced-repetition.github.io/ts-fsrs/zh-CN/guide/middleware/lifecycle.md.
  • 简体中文
  • 生命周期

    处理函数同步执行,按注册顺序环绕在调度器核心周围。.use(a, b) 与 .use(a).use(b) 的注册顺序相同,且每次调用 use 都返回新的定义,不改动原定义。调度器核心位于调用链中间,因此 next() 之前的代码准备操作,之后的代码读取结果。

    环绕核心的顺序

    对于 .use(a, b),调用顺序如下:

    a: next() 前
      b: next() 前
        调度器核心
      b: next() 后
    a: next() 后

    调用一次 next(),让正常调度流程继续执行。在它之前设置 ctx.candidate.desiredRetention[ctx.input.grade] 等计算输入,在它之后读取或调整计算结果。复习阶段的 ctx.scheduledDays 表示以天为单位的间隔。所有处理函数结束后,调度器再通过配置的 chrono 计算到期时间,并校验最终结果。

    策略相互作用时,顺序会影响结果:scheduled days 应放在间隔策略之前,才能在调用链返回时记录最终值;学习步骤应放在最大间隔和单调间隔之前,以保留显式步骤的等待时间。Leech 应放在那些会于 next() 后设置 scheduleStatus 的处理函数之前,让暂停状态最后生效。内置策略 列出了每个策略以及 DefaultScheduler 的排列顺序。

    复习与撤销

    撤销会按相同的注册顺序执行独立的 rollback 处理函数。它可以读取 ctx.config、ctx.input.card 和 ctx.input.revlog,结果只写入 ctx.result.card。仅声明 schema 不会自动恢复自定义字段:应像概览的连续答对示例一样,在复习时保存所需旧值,在撤销时按配置的策略读取并恢复。

    预览也会为所需的候选评分执行 review 处理函数。因此不要在处理函数中写数据库、发通知或执行其他外部操作;由应用保存最终选定的复习结果。forget() 通过默认值重置卡片,没有单独的 forget 处理函数;连续答对示例因此会把计数重置为零。