Files
deepseek-harness/website/zh-CN/api/cordis/fiber.md
T
2026-07-09 16:07:58 +08:00

2.2 KiB

Fiber

Fiber(作用域)是插件实例的运行时容器,管理其生命周期和效果。

状态机

PENDING → LOADING → ACTIVE → UNLOADING → DISPOSED
                 ↘ FAILED
状态 数值 含义
PENDING 0 依赖未就绪,等待中
LOADING 1 正在执行 apply
ACTIVE 2 运行中
FAILED 3 apply 抛出异常
UNLOADING 4 正在撤销效果
DISPOSED 5 已完全卸载

实例属性

fiber.uid

  • 类型: number

Fiber 的唯一标识符。

fiber.status

  • 类型: number

当前状态(见状态机)。

fiber.config

  • 类型: object

传递给插件的配置对象。

fiber.error

  • 类型: Error | undefined

如果状态是 FAILED,包含导致失败的异常。

实例方法

fiber.effect(callback)

  • callback: () => (() => void) | void
  • 返回值: () => void

注册一个效果。callback 在 Fiber 激活时执行;如果返回函数,该函数在 Fiber dispose 时执行。

ctx.effect(() => {
  const timer = setInterval(tick, 1000)
  return () => clearInterval(timer)
})

等价地可以通过 ctx.effect() 调用(ctx 代理到当前 fiber)。

fiber.dispose()

  • 返回值: Promise<void>

手动 dispose 该 Fiber。按注册逆序撤销所有效果,递归 dispose 所有子 Fiber。

const child = ctx.plugin(somePlugin)
// 之后:
await child.dispose()

fiber.update(config)

  • config: object 新配置
  • 返回值: void

热更新配置。如果新旧配置不同,触发 dispose + 重新 apply。

fiber.restart()

  • 返回值: void

强制重启:dispose 后重新加载。

fiber.then(resolve, reject?)

  • 返回值: Promise<void>

使 Fiber 可以被 await:等到状态进入 ACTIVE 或 FAILED。

const fiber = ctx.plugin(myPlugin)
await fiber  // 等待插件加载完成

访问当前 Fiber

export function apply(ctx: Context) {
  const fiber = ctx.fiber  // 当前插件的 Fiber
  console.log(fiber.status)  // 1 (LOADING, 因为正在 apply 中)
}