> For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-TW/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/zh-TW/llms-full.txt.

# 生命週期

處理函式同步執行，依註冊順序環繞在排程器核心周圍。`.use(a, b)` 與 `.use(a).use(b)` 的註冊順序相同，且每次呼叫 `use` 都回傳新的定義，不改動原定義。排程器核心位於呼叫鏈中間，因此 `next()` 之前的程式碼準備操作，之後的程式碼讀取結果。

## 環繞核心的順序

對於 `.use(a, b)`，呼叫順序如下：

```text
a: next() 前
  b: next() 前
    排程器核心
  b: next() 後
a: next() 後
```

呼叫一次 `next()`，讓正常排程流程繼續執行。在它之前設定 `ctx.candidate.desiredRetention[ctx.input.grade]` 等計算輸入，在它之後讀取或調整計算結果。複習階段的 `ctx.scheduledDays` 表示以天為單位的間隔。所有處理函式結束後，排程器再透過設定的 chrono 計算到期時間，並驗證最終結果。

策略互相影響時，順序會影響結果：scheduled days 應放在間隔策略之前，才能在呼叫鏈回傳時記錄最終值；學習步驟應放在最大間隔和單調間隔之前，以保留明確指定的等待時間。Leech 應放在那些會於 `next()` 後設定 `scheduleStatus` 的處理函式之前，讓暫停狀態最後生效。[內建策略](https://open-spaced-repetition.github.io/ts-fsrs/zh-TW/guide/middleware/built-in.md) 列出了每個策略以及 `DefaultScheduler` 的排列順序。

## 複習與復原

復原會依相同的註冊順序執行獨立的 rollback 處理函式。它可以讀取 `ctx.config`、`ctx.input.card` 和 `ctx.input.revlog`，結果只寫入 `ctx.result.card`。僅宣告 schema 不會自動還原自訂欄位：應像[概覽](https://open-spaced-repetition.github.io/ts-fsrs/zh-TW/guide/middleware/index.md)的連續答對範例一樣，在複習時儲存所需的舊值，在復原時依設定的策略讀取並還原。

預覽也會為所需的候選評分執行 review 處理函式。因此不要在處理函式中寫入資料庫、傳送通知或執行其他外部操作；由應用程式儲存最後選定的複習結果。`forget()` 透過預設值重設卡片，沒有獨立的 forget 處理函式；連續答對範例因此會把計數歸零。
