Skip to content

API ​

flexstate只有一个FlexStateMachine类。

构造参数 ​

typescript
export interface FlexStateOptions extends FlexStateTransitionHooks,LiteEventEmitterOptions{
    name?               : string,                // 当前状态机名称
    states?             : FlexStateMap,          // 状态声明
    parent?            : FlexState,              // 父状态实例
    context?           : any,                    // 当执行动作或状态转换事件时的this指向
    autoStart?         : boolean,                // 是否自动开始运行状态机,=false需要调用.start()
    actions?           : FlexStateActionMap,     // 动作声明
    injectActionMethod?: boolean,                // 将动作方法注入到当前实例中
    throwActionError?  : boolean,                // 是否在执行动作方法时抛出错误
    injectStateValue?  : boolean,                // 在实例中注入:大写状态名称的字段,其值 =状态值
    history?           : number                  // 记录状态转换历史,0=不记录,N=最大记录N条历史
    scope?             : FlexStateMachine,       // 内部独立子状态域
}

属性 ​

name ​

状态机名称,默认等于当前类名

  • 类型:string

context ​

定义状态机的上下文对象,默认等于当前状态机实例。flexstate从context读取:

  • static states
  • static actions
  • 所有状态钩子
  • 所有状态监视事件

parent ​

返回当前状态机父状态

  • 类型:FlexState

scope ​

父状态所在的状态机实例

  • 类型:FlexStateMachine

running ​

状态机是否处于运行状态

  • 类型:boolean

actions ​

已注册的动作列表

  • 类型:
typescript
export interface FlexStateAction{
    name?         :string,                                      //指定唯一的动作名称
    alias?        : string,  									// 动作别名,当在实例中注入同名的方法时,如果指定别名,则使用该别名
    injectMethod? : boolean,                                    // 是否上下文对象中注入同名的方法
    // 指定该动作仅在当前状态是when中的一个时才允许执行动作
    when?         : string | Array<string> | ((params:Object,current:FlexState)=>Array<string>),       		                
    pending?      : string | Function,                			// 开始执行动作前切换到pending状态
    resolved?     : string | Function,                			// 执行成功后切换到resolved状态
    rejected?     : string | Function,                			// 执行失败后切换到rejected状态
    finally?      : string | ((params:Object)=>Array<string>)   // 无论执行成功或失败均切换到finally状态
    execute(...args:any[]):void                                 // 动作执行函数,具体干活的
    [key:string]:any
} 

// 动作列表{[name]:<FlexState>}
export type FlexStateActionMap= Record<string,FlexStateAction>

CURRENT ​

返回当前状态值

  • 类型:number

current ​

返回当前状态

  • 类型:FlexState

initial ​

返回初始状态

  • 类型:FlexState

transitioning ​

返回是否正在进行状态lfrq

  • 类型:boolean

history ​

当配置options.history大于零时,返回状态转换历史

  • 类型:Array<[number,string]>
  • 返回值:
typescript
`[
    [<时间戳>,<状态名称>],
    [<时间戳>,<状态名称>],
    [<时间戳>,<状态名称>],
    .....
]`

options ​

状态机配置参数

  • 类型: Required<FlexStateOptions> & LiteEventEmitterOptions
typescript
interface FlexStateOptions extends FlexStateTransitionHooks,LiteEventEmitterOptions{
    name?               : string,                       // 当前状态机名称
    states?             : FlexStateMap,                 // 状态声明
    parent?            : FlexState,                     // 父状态实例
    context?           : any,                           // 当执行动作或状态转换事件时的this指向
    autoStart?         : boolean,                       // 是否自动开始运行状态机,=false需要调用.start()
    actions?           : FlexStateActionMap,            // 动作声明
    injectActionMethod?: boolean,                       // 将动作方法注入到当前实例中
    throwActionError?  : boolean,                       // 是否在执行动作方法时抛出错误
    injectStateValue?  : boolean,                       // 在实例中注入:大写状态名称的字段,其值 =状态值
    history?           : number                         // 记录状态转换历史,0=不记录,N=最大记录N条历史
    scope?             : FlexStateMachine,              // 内部独立子状态域
}

方法 ​

start ​

启动状态机

stop ​

停止状态机

reset ​

重置状态机

getState ​

返回状态数据。

  • 参数:
名称类型说明
param`FlexStateArgsFunction`
argsArray<any>当param是一个函数时用来额外传递给函数的参数
  • 返回类型:

FlexState

  • 示例
typescript
    states={ready:{name:"ready",value:1,title:"准备就绪"}}

    getState(1)  // == states.ready
    getState("ready") // == states.ready
    getState(()=>"ready") // == states.ready
    getState(()=>1) // == states.ready
    getState({name:"ready",...}) // ==  states.ready

add ​

注册一个新的状态

  • 参数:
名称类型说明
stateNewFlexState状态数据
  • 返回类型:

无

remove ​

移除存在的状态

  • 参数:
名称类型说明
namestring状态名称
  • 返回类型:

无

isValid ​

返回输入参数是否是有效的状态

  • 参数:
名称类型说明
stateany状态名称 / 状态值 / FlexState / Function
  • 返回类型:

boolean

isCurrent ​

返回输入参数是否是当前状态

  • 参数:
名称类型说明
stateany状态名称 / 状态值 / FlexState / Function
  • 返回类型:

boolean

isFinal ​

返回是否处于最终状态

  • 参数:

无

  • 返回类型:

boolean

register ​

注册状态动作

  • 参数:
名称类型说明
actionFlexStateAction状态动作参数
  • 返回类型:

无

unregister ​

注销状态动作

  • 参数:
名称类型说明
namestring状态动作名称
  • 返回类型:

无

cancel ​

停止正在执行的状态转换,执行后会触发transition/cancel事件,并且正在执行的钩子函数时会触发CancelledTransitionError

  • 参数:
名称类型说明
namestring状态动作名称
  • 返回类型:

无

transition ​

转换到指定状态

  • 参数:
名称类型说明
nextFlexStateArgs下一个状态
paramsany额外的参数,被传递给钩子函数
  • 返回类型:

无

canTransitionTo ​

判断是否可以从当前状态转换到指定状态

typescript
    canTransitionTo(fromState:FlexStateArgs, toState?:FlexStateArgs):boolean 
    canTransitionTo(toState:FlexStateArgs):boolean
    canTransitionTo():boolean
  • 参数:
名称类型说明
fromStateFlexStateArgs从该状态
toStateFlexStateArgs转换到此状态
  • 返回类型:

是否转换成功 boolean

execute ​

执行指定的动作

typescript
    execute(name:string, ...args:any[]):void
  • 参数:
名称类型说明
namestring动作名称
argsany[]传递给动作函数的参数
  • 返回类型: 无

waitForState ​

等待状态机进入指定状态

typescript
async waitForState(state:FlexStateArgs)
  • 参数:
名称类型说明
stateFlexStateArgs状态名称或值
  • 返回类型:

Promise

waitForInitial ​

等待进入初始状态

  • 参数:

无

  • 返回类型:

Promise

Released under the MIT License.