For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms-full.txt, and this page is available as Markdown at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/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 にのみ書き込みます。スキーマを宣言するだけでは独自フィールドは復元されません。概要 の連続正解カウンタの例のように、復習時に必要な変更前の値を保存し、ロールバック時に設定されたポリシーに従って読み戻してください。

プレビューも候補となる評価に対して review ハンドラを実行します。ハンドラ内でデータベースへの書き込みや通知などの外部操作を行わず、確定した復習結果をアプリケーション側で保存してください。forget() は専用ハンドラではなくデフォルト値を使ってカードをリセットします。そのため連続正解カウンタの例ではカウンタがゼロになります。