为什么这个简单的函数不能在这个javascript状态机中的这个对象上运行

Why can't this simple function run on this object in this javascript state machine?

本文关键字:对象 运行 状态机 不能 简单 函数 为什么 javascript      更新时间:2023-09-26

我正在使用Stately.js状态机作为节点.js

https://github.com/fschaefer/Stately.js/

我从一个简单的例子开始。

var fsm = Stately.machine({
    'START': {
        // event: function () {
        // }
    },
    'NEXT_STATE': {
        // event: function () {
        // }
    },
});
fsm.setMachineState(fsm.NEXT_STATE);

我收到错误TypeError: fsm.setMachineState is not a function.可能出了什么问题?

不能从状态机外部更改状态。您需要将当前状态上的事件更改为另一个状态。

我找到了一些黑客解决方案,如果您不想更改 fsm 库,它允许您在状态机this引用之外更改状态。

代替正常的状态转换,您可以定义自己的函数

通过将此功能添加到每个状态

'setState': function(stateName){
  return this[stateName]
}

现在你的状态将如下所示,现在可以从状态机外部设置状态

var fsm = Stately.machine({
    'START': {
        'do_something': /* => */ 'NEXT_STATE',
        'setState': function(stateName){
            return this[stateName]
        }
    },
    'NEXT_STATE': {
        'setState': function(stateName){
            return this[stateName]
        }
    },
});
fsm.setState('YOUR_STATE_NAME');