Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 队列逻辑和一段时间_Javascript_Node.js - Fatal编程技术网

Javascript 队列逻辑和一段时间

Javascript 队列逻辑和一段时间,javascript,node.js,Javascript,Node.js,嗨,我有一排球员, 从这一排球员中我得到了一个符合两个条件的球员 const condition = (5 / 100) * playerOne.mmr + playerOne.mmr const condition2 = playerOne.mmr - ((5 / 100) * playerOne.mmr); 找到另一个比我的玩家mmr值低5%到高5%的玩家 然后我做到了 searching(playerOne) { const condition = (5 / 100) * p

嗨,我有一排球员, 从这一排球员中我得到了一个符合两个条件的球员

const condition = (5 / 100) * playerOne.mmr + playerOne.mmr
const condition2 = playerOne.mmr - ((5 / 100) * playerOne.mmr);
找到另一个比我的玩家mmr值低5%到高5%的玩家

然后我做到了

  searching(playerOne) {
    const condition = (5 / 100) * playerOne.mmr + playerOne.mmr
    const condition2 = playerOne.mmr - ((5 / 100) * playerOne.mmr);

    const player = playerOne;
    const playerTwo = this.players.find((playerTwo) => playerTwo.mmr < condition && playerTwo.mmr > condition2 && playerTwo.id != playerOne.id);

    while(!this.players.find((playerTwo) => playerTwo.mmr < condition && playerTwo.mmr > condition2 && playerTwo.id != playerOne.id)){
      const playerTwo = this.players.find((playerTwo) => playerTwo.mmr < condition && playerTwo.mmr > condition2 && playerTwo.id != playerOne.id);
      console.log(this.players);
    }

    const matchedPlayers = [
      player,
      playerTwo
    ]
    // remove matched players from this.players
    this.removePlayers(matchedPlayers);
    // return new Match with matched players
    return matchedPlayers;
  }
}
我在调用搜索功能后添加了我的5播放器 在我的whilei中,我将console.log放入我的队列中,但只有4个播放器出现,而不是我的5个播放器,因此它处于无限循环中,我不知道我哪里出错了,也不知道如何修复,或者我的逻辑是否非常失败

[
  Player { id: 1, name: 'spt', mmr: 970 },
  Player { id: 2, name: 'test2', mmr: 1000 },
  Player { id: 3, name: 'test3', mmr: 1050 },
  Player { id: 4, name: 'test4', mmr: 70 }
]

您需要以异步方式进行搜索。有很多方法可以实现它。就我个人而言,我是承诺的粉丝。下面展示了一种基本的方法,可以创建一种等待玩家加入范围的方法。我还添加了取消搜索的功能

const玩家=[
{id:1,名称:'spt',mmr:970},
{id:2,name:'test2',mmr:1000},
{id:3,名称:'test3',mmr:1050},
{id:4,名称:'test4',mmr:70}
]
const makeMatch=(id)=>{
让计时器
让允诺者解决
让Promiser退出
持续承诺=新承诺((解决、拒绝)=>{
promiseResolve=解决
Promiseject=拒绝
});
const playerDetails=players.find(p=>p.id==id)
常量{mmr}=playerDetails
const findMatchup=()=>{
const secondPlayer=players.find(p=>
p、 id!==id&&
Math.abs(p.mmr-mmr){
计时器和窗口清除超时(计时器)
promiseReject('已取消')
},
承诺
}
}
//与玩家4进行一场比赛
//没有匹配项,因此它将循环一段时间
变量匹配=makeMatch(4)
配对。承诺。然后({player1,player2})=>{
console.log(player1、player2)
})
//表现得像一个新玩家签约一样,把玩家推进去
//在这之后我们应该是一对
window.setTimeout(()=>{
console.log(“添加了播放器”);
push({id:5,name:'test5',mmr:75})
}, 5500)
//杀戮的例子
//与玩家1进行一场比赛
//没有匹配项,因此它将循环一段时间
var matchMaking2=makeMatch(1)
matchMaking2.promise.then({player1,player2})=>{
console.log(player1、player2)
}).catch((详细信息)=>{
控制台日志(详细信息);
})
//就像用户单击“取消”按钮停止播放一样
window.setTimeout(()=>{
console.log(“播放器已取消”);
配对2.kill()

}因为
queue.addPlayer(新玩家(5,'test6',75));
queue.addPlayer(新玩家(3,'test3',1050))之前不会运行
已完成运行。同时,您在while循环内使用
const playerTwo
的代码不会更新循环外的playerTwo。如果您希望它以后能够找到内容,则需要使其异步。我该如何做?您能帮助我吗?我尝试在player2上执行异步并等待,但我不知道不能执行什么操作o下一步做什么?你能回答吗?这样我就可以对你的答案投赞成票了?我让我的函数异步并在我的查找中使用wait,但我不知道以后我能做些什么loops bro谢谢我对此有点怀疑:Math.abs(p.mmr-mmr)我没有做任何你的计算…我编造了一些东西。它是说,如果结果是玩家的正负10。改变逻辑,只是一个如何使用承诺的基本想法。我会做一段时间,而不是使用setTimout,以便在没有匹配的情况下,它仍然在循环中?while循环不会工作,因为JavaScript是单线程。我知道我正在使用nodejs,因为我将替换窗口?
[
  Player { id: 1, name: 'spt', mmr: 970 },
  Player { id: 2, name: 'test2', mmr: 1000 },
  Player { id: 3, name: 'test3', mmr: 1050 },
  Player { id: 4, name: 'test4', mmr: 70 }
]