为什么可以';这个简单的函数是否在这个javascript状态机的对象上运行?
我正在为node.js使用Stately.js状态机 我从一个简单的例子开始为什么可以';这个简单的函数是否在这个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);
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播放机,你可以把它放在暂停状态,而它没有打开,没有光盘加载,没有播放。