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.