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

时间:2016-03-14 10:25:36

标签: javascript node.js state-machine stately.js

我正在使用Stately.js状态机来获取node.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。有什么不对?

2 个答案:

答案 0 :(得分:2)

您无法从状态机外部更改状态。您需要将当前状态的事件更改为其他状态。

答案 1 :(得分:1)

我找到了一些 hacky解决方案,允许您在状态机中更改this引用之外的状态,以防您不想更改fsm库。

您可以定义自己的功能

,而不是正常的状态转换

将此功能添加到每个州

'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');