Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';这个简单的函数是否在这个javascript状态机的对象上运行?_Javascript_Node.js_State Machine_Stately.js - Fatal编程技术网

为什么可以';这个简单的函数是否在这个javascript状态机的对象上运行?

为什么可以';这个简单的函数是否在这个javascript状态机的对象上运行?,javascript,node.js,state-machine,stately.js,Javascript,Node.js,State Machine,Stately.js,我正在为node.js使用Stately.js状态机 我从一个简单的例子开始 var fsm = Stately.machine({ 'START': { // event: function () { // } }, 'NEXT_STATE': { // event: function () { // } }, }); fsm.setMachineState(fsm.NEXT_STATE);

我正在为node.js使用Stately.js状态机

我从一个简单的例子开始

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

fsm.setMachineState(fsm.NEXT_STATE);

我得到错误
TypeError:fsm.setMachineState不是一个函数
。有什么不对劲

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

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

我找到了一些黑客解决方案,允许您在状态机中更改
引用之外的状态,以防您不想更改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');

我发现了一些黑客解决方案,允许您在状态机中的
引用之外更改状态,以防您不想更改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');

您是否已验证Stately.js已正确加载?是。当我运行
fsm.getMachineState()
时,它会工作。请按照文档进行操作。您只能在操作中的
this
引用上调用
setMachineState
,请遵循他们的示例。您是否验证了Stately.js已正确加载?是。当我运行
fsm.getMachineState()
时,它会工作。请按照文档进行操作。您只能在操作内的
this
引用上调用
setMachineState
,请遵循他们的示例。这似乎是状态机的限制。我使用了其他的状态机,它允许我这样做。谢谢我认为这是一个更好的实现,因为您无法切换到“机器外”的不同状态。这样看:你有一个DVD播放机,你可以把它放在暂停状态,而它没有打开,没有光盘加载,没有播放。这似乎是状态机的限制。我使用了其他的状态机,它允许我这样做。谢谢我认为这是一个更好的实现,因为您无法切换到“机器外”的不同状态。这样看:你有一个DVD播放机,你可以把它放在暂停状态,而它没有打开,没有光盘加载,没有播放。