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
,并且仍然可以多次执行跑赢战斗。感谢您的努力:)