我正在尝试将来更改 FSM 状态,但我不起作用..
我想我正在寻找类似 pipeTo 的方法。
When(State.Waiting) {
case Event(anyMsg, anyData) =>
asyncCode.map(res =>
if (res == 1) {
goto(State.Working) using Data.MyData
} else {
stay() replying "bad response"
}
)
}
转到命令 被执行 但 fsm 不会将状态更改为 State.Working
我自己找到了这个工作
When(State.Waiting) {
case Event(anyMsg, anyData) =>
asyncCode.map(res =>
if (res == 1) {
self ! "do job"
} else {
stay() replying "bad response"
}
)
case Event("do job", anyData) => {
goto(State.Working) using Data.MyData
}
}
可能有更好的想法来解决问题
最佳答案
将来不要改变你的 Actor 的状态或任何不在主“线程”内的东西。
解决问题的正确方法是向 self 发送一条消息,它只会改变状态,例如
When(State.Waiting) {
case Event(anyMsg, anyData) =>
asyncCode.map(res =>
if (res == 1) {
self ! GoToWorking(Data.MyData)
} else {
self ! Stay
}
)
goto(State.WaitingForResponse)
}
When (State.WaitingForResponse) {
case Event(GoToWorking(data), _) =>
goto(State.Working) using data
case Event(Stay,_) =>
stay()
}
关于scala - Akka FSM Goto future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489564/