You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
i used it by another way, because for me it is easier to understand when function is in state rather than in transition.
but the problem comes if i don't use setTimeout, it will show error.
"transition is invalid while previous transition is still in progress"
but if i add setTimeout(function(){}, 0); error is gone.
could you help solve it?
var FSM = StateMachine.factory({
init: 'start',
transitions: [
{ name: 'step', from: 'start', to: 'A' },
{ name: 'step', from: 'A', to: 'B' },
{ name: 'step', from: 'B', to: 'C' },
{ name: 'step', from: 'C', to: 'D' },
{ name: 'step', from: 'D', to: 'start' }
],
methods: {
onStep: function () {
var self = this;
var obj = {
'start': function () {
console.log(`i am in ${self.state} state`);
**setTimeout(function () {
self.step();
}, 0);**
},
'A': function () {
console.log(`i am in ${self.state} state`);
**setTimeout(function () {
self.step();
}, 0);**
},
'B': function () {
console.log(`i am in ${self.state} state`);
**setTimeout(function () {
self.step();
}, 0);**
},
'C': function () {
console.log(`i am in ${self.state} state`);
**setTimeout(function () {
self.step();
}, 0);**
},
'D': function () {
console.log(`i am in ${self.state} state`);
**setTimeout(function () {
self.step();
}, 0);**
}
}
obj[self.state]();
}
}
});
var fsm1 = new FSM(); // 'init()' transition fires from 'none' to 'A' for fsm1
fsm1.step();
The text was updated successfully, but these errors were encountered:
i don't really understand why you used the fsm like that...
i think what happens is:
onStep is a method called when you start the transition by calling fsm1.step()
calling this method is just 1 part of the transition process, not the end of it
if you are calling 'step' again inside this function, you are actually trying to make the fsm start a new 'step' transition, while still in the previous transition
if you put the setTimeout, it is only called after the transition is over so you're ok, but i think you'll actually cause the state machine to never stop 'step'ping from state to state
was that your intention?
It is just a demo that shows my questions.
my suggestion is that there should be some function that can force state transition although it is still in progress. and i think this is quite common situtation. the state is interrupted by some action and have to transit immediately.
BTW:
Below is game which used state-machine, and i have to use setTimout(fn, 0) to dismiss the error message. https://github.com/sunq0001/Tetris
i used it by another way, because for me it is easier to understand when function is in state rather than in transition.
but the problem comes if i don't use setTimeout, it will show error.
"transition is invalid while previous transition is still in progress"
but if i add setTimeout(function(){}, 0); error is gone.
could you help solve it?
The text was updated successfully, but these errors were encountered: