В настоящее время я пишу движок игры в nodejs.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.
Я попытался ввести время задержки между состояниями, однако это вводит дополнительные ошибки состояния гонки в моей кодовой базе.
Может кто-нибудь, пожалуйста, просветит меня лучший подход к этой проблеме?