【发布时间】:2012-03-24 16:58:11
【问题描述】:
我目前正在用 nodejs 编写游戏引擎。
我的游戏有几个状态。我们称它们为 StateA、StateB、StateC。序列的流程是StateA => StateB => StateC。
我想在每个状态结束时测试我的引擎的状态。我目前有这个结构:
function attachEventListeners = function(instance) {
instance.on('START_STATE_A', stateA);
instance.on('START_STATE_B', stateB);
instance.on('START_STATE_C', stateC);
}
var stateACallBack = function() {};
var stateBCallBack = function() {};
var stateCCallBack = function() {};
function stateA() {
// Do something...
stateACallBack();
setTimeout(function() { this.emit('START_STATE_B'); }, 3000)
}
function stateB() {
// Do something...
stateBCallBack();
setTimeout(function() { this.emit('START_STATE_C'); }, 3000)
}
function stateC() {
// Do something...
stateCCallBack();
setTimeout(function() { this.emit('START_STATE_A'); }, 3000)
}
所以我目前的方法是让我的测试用例覆盖 stateXCallback 并在这些函数中执行测试逻辑。
但是,我看到 stateB 在 stateACallBack 完成执行之前被触发的竞争条件。因此,stateACallback 看到的是应该由 stateBCallback 评估的状态。
我尝试在状态之间注入延迟时间,但是,这会在我的代码库中引入额外的竞争条件错误。
有人可以告诉我解决这个问题的更好方法吗?
【问题讨论】: