0

我正在使用带有 PersistentFSM 的 akka,并希望能够在应用事件后使用 stateData 值回复消息

when(StartedState) {
    case Event(..., ...) =>
        ...
        stay applying BidPlaced(...) replying BidPlacedReply(stateData)
}

BidPlacedReply 是一个具有 apply 方法的对象,该方法允许基于我的 stateData 的某些字段构造 BidPlacedReply,例如,我希望能够使用包含当前最高投标人 ID、最高投标人价格的 BidPlacedReply 进行回复......和此值在修改状态并产生“stateAfter”的 applyEvent 中计算。

不幸的是,“回复 BidPlacedReply(stateData)”方法在应用 applyEvent 之前使用 stateData 值调用 BidPlacedReply.apply 方法(这就是我在日志中看到的),

我尝试了以下构造,但它没有修改下一条消息的 stateData(需要调用应用程序!!!)

applyEvent(BidPlaced(...), stateData) match {
    case stateDataAfter => stay replying BidPlacedReply(stateDataAfter)
}

有谁知道我如何回复与 applyEvent 的结果相对应的 stateData 值(stateData“之后”)?

4

1 回答 1

0

这个怎么样?

when(StartedState) { case Event(..., ...) => ... stay applying BidPlaced(...) andThen { (stateDataAfter: ...) => sender() ! BidPlacedReply(stateDataAfter) } }

于 2017-08-07T14:34:55.590 回答