Skip to content

注册 Ability ​

NACAB支持AbilityHandler和闭包两种注册方式。两者写入同一张注册表,名称重复时后注册者覆盖已有项。

AbilityHandler ​

ts
abstract class AbilityHandler<R = unknown> {
  abstract readonly name: string
  abstract readonly description: string
  abstract execute(this: AbilityInstance): Promise<R>
}
ts
import { NACAB, AbilityHandler } from '@nyirusu/nasdk/NACAB'

class Add extends AbilityHandler<number> { 
  readonly name = 'math.add'
  readonly description = '两数相加'

  async execute() {
    const { a, b } = this.input as { a: number; b: number }
    return a + b
  }
}

const nacab = new NACAB({ handlers: [new Add()] })

Handler是无状态、可复用的逻辑定义。execute()的this绑定到当前AbilityInstance:

成员作用
this.id本次调用的唯一ID
this.input本次调用输入
this.state本次调用的临时状态空间
this.status当前执行状态

因此execute()应使用普通方法,不应使用箭头函数。state只在本次调用期间存活。

构造后也可以注册:

ts
nacab.registerHandler(new Add())

闭包注册 ​

ts
nacab.register({
  name: 'math.add',
  description: '两数相加',
  execute: input => {
    const { a, b } = input as { a: number; b: number }
    return a + b
  },
})

闭包只接收输入,不绑定AbilityInstance。该形式用于AbilityProcessor的register()接口,也是NApp注册NApp.*内建Ability的入口。

声明 ​

ts
const abilities = nacab.listAbility()

listAbility()返回所有Handler的name与description,供NApp生成Ability声明。

Released under the MIT License.