Javascript 在发出完成后而不是在发出之前更改IF语句中的值
我想在这里实现的是当Javascript 在发出完成后而不是在发出之前更改IF语句中的值,javascript,socket.io,Javascript,Socket.io,我想在这里实现的是当IF语句为true时,fightID会更改为其他值,因此它与之前分配的值不匹配,因此我无法在战斗结束时通过控制台直接运行win-fightemit。但我现在得到的只是坏id,所以它甚至不会运行赢战发射。我怎样才能解决这个问题 var uuid = uuid4(); socket.on('attack', () => { var fightID = uuid; if(enemyHealth === 0 &&am
IF
语句为true
时,fightID
会更改为其他值,因此它与之前分配的值不匹配,因此我无法在战斗结束时通过控制台直接运行win-fight
emit。但我现在得到的只是坏id
,所以它甚至不会运行赢战
发射。我怎样才能解决这个问题
var uuid = uuid4();
socket.on('attack', () => {
var fightID = uuid;
if(enemyHealth === 0 && uuid4.valid(uuid) === fightID|| userHealth === 0
&& enemyHealth === 0 && uuid4.valid(uuid) === fightID) {
fightID = 185;
socket.emit('win-fight'); // next emit
} else {
console.log('Bad id');
}
});
如果我正确理解您的问题,则应通过进行以下调整来解决此问题:
var uuid = uuid4();
var isFightFinished = false;
// Declare fightID here
var fightID = uuid;
socket.on('attack', () => {
// Remove fightID from here
// var fightID = uuid;
if(isFightFinished === false && (enemyHealth <= 0 || userHealth <= 0)) {
// Now you're newly assigned fightID is remembered for the next attack
// event
fightID = 185;
isFightFinished = true;
socket.emit('win-fight'); // next emit
} else {
console.log('Bad id');
}
});
var uuid=uuid4();
var isFightFinished=false;
//在这里申报战斗ID
var-fightID=uuid;
socket.on('attack',()=>{
//从这里删除fightID
//var-fightID=uuid;
如果(isFightFinished===false&&(enemyHealth当玩家hp为零时,我仍然会得到坏id
ant,它不会发出赢得战斗
这很有效。但是,如果我不检查fightID是否有效,当两个玩家的hp都为零时,我可以通过控制台多次运行赢得战斗
。)再次工作,但真的很奇怪,即使战斗结束(其中一名玩家的hp为零)如果不刷新页面,我仍然可以通过控制台成功运行win-fight
emit。也许我应该从客户端发出一些东西。也许这个更新是一个更好、更可靠的方法?尽管如此。当用户hp大于零时,它仍然有效。但即使hp变为零,值也会变为true
,并且仍然可以多次执行跑赢战斗。感谢您的努力:)