Javascript 当函数被添加到数组中时,如何从充当队列的数组中执行函数?

Javascript 当函数被添加到数组中时,如何从充当队列的数组中执行函数?,javascript,node.js,Javascript,Node.js,我有一个配对算法,我向一个数组添加一个函数调用,该数组充当队列,并逐个执行,以避免匹配时发生冲突。我希望在向队列中添加函数时,能够对队列进行监视和执行。像例行检查数组是否有元素一样?我可以使用类似于resquelibrary的方法来执行此操作吗 编辑:让我把我的问题说清楚。我有一个使用socket.io的游戏,其中我将两个用户匹配在一起,并与他们共享一些数据。用户单击配对按钮并调用配对功能。但问题是,在高峰时间,用户A与B匹配,B与C匹配。这不应该发生。因此,我使用and数组对配对函数调用进行排

我有一个配对算法,我向一个数组添加一个函数调用,该数组充当队列,并逐个执行,以避免匹配时发生冲突。我希望在向队列中添加函数时,能够对队列进行监视和执行。像例行检查数组是否有元素一样?我可以使用类似于
resque
library的方法来执行此操作吗


编辑:让我把我的问题说清楚。我有一个使用socket.io的游戏,其中我将两个用户匹配在一起,并与他们共享一些数据。用户单击配对按钮并调用配对功能。但问题是,在高峰时间,用户A与B匹配,B与C匹配。这不应该发生。因此,我使用and数组对配对函数调用进行排队。我希望数组一个接一个地执行每个函数调用。有时数组会长时间处于空队列状态。

希望这段简单的代码能够为函数添加参数和上下文,并在以后执行它们,以满足您的问题

/**
*包装函数代码
*
*fn-功能参考
*上下文-“此”上下文
*params-传递给函数的参数数组
*/
var wrapFun=函数(fn、上下文、参数){
返回函数(){
fn.应用(上下文、参数);
};
}
//要包装的函数
var pairMatch=函数(userA、userB){
//您的匹配代码在这里。。。
log('matching user',userA.name',with user',userB.name);
}
var user1={name:'Alice'};
var user2={name:'Bob'};
var user3={name:'Charlie'};
var userN={name:'Zoe'};
//包装函数(参数必须在数组中)
var fun1=wrapFun(pairMatch,this,[user1,user2]);
var fun2=wrapFun(pairMatch,this,[user3,userN]);
//创建一个数组并将包装的函数附加到其中
var funQ=[];
funQ.push(fun1);
funQ.push(fun2);
//移动数组中的所有项(函数),并逐个执行。。。
while(funQ.长度){
(funQ.shift())();

}
希望这段简单的代码能够为函数添加参数和上下文,并在以后执行它们,以满足您的问题

/**
*包装函数代码
*
*fn-功能参考
*上下文-“此”上下文
*params-传递给函数的参数数组
*/
var wrapFun=函数(fn、上下文、参数){
返回函数(){
fn.应用(上下文、参数);
};
}
//要包装的函数
var pairMatch=函数(userA、userB){
//您的匹配代码在这里。。。
log('matching user',userA.name',with user',userB.name);
}
var user1={name:'Alice'};
var user2={name:'Bob'};
var user3={name:'Charlie'};
var userN={name:'Zoe'};
//包装函数(参数必须在数组中)
var fun1=wrapFun(pairMatch,this,[user1,user2]);
var fun2=wrapFun(pairMatch,this,[user3,userN]);
//创建一个数组并将包装的函数附加到其中
var funQ=[];
funQ.push(fun1);
funQ.push(fun2);
//移动数组中的所有项(函数),并逐个执行。。。
while(funQ.长度){
(funQ.shift())();


}
您是否控制将函数添加到数组中的代码?如果是这样的话,您可以执行一个回调函数,在您添加某个内容时处理执行,或者在添加函数时添加一个事件侦听器并分派一个CustomEvent。是的,我可以控制代码。如果我尝试在每次添加内容时执行,这可能会导致并行性。我不想那样。我尝试的是添加一个检查数组的无限循环,但即使在工作中,它看起来也很混乱。Javascript是单线程的,所以你不必担心并行性。好的,这很酷,所以当用户同时单击pair按钮时没有问题。你控制了将函数添加到数组中的代码吗?如果是这样的话,您可以执行一个回调函数,在您添加某个内容时处理执行,或者在添加函数时添加一个事件侦听器并分派一个CustomEvent。是的,我可以控制代码。如果我尝试在每次添加内容时执行,这可能会导致并行性。我不想那样。我尝试的是添加一个检查数组的无限循环,但即使在工作中,它看起来也很混乱。Javascript是单线程的,所以你不必担心并行性。好的,这很酷,所以当用户同时单击pair按钮时没有问题?但是在这种情况下,如果数组中没有函数,while循环将结束。对吧?对。你应该将while循环集成到应用程序的逻辑中。。。代码并没有实现整个应用程序,只是解释了如何使用上下文和参数对函数进行排队,并在以后的时间在队列中执行它们……有没有办法知道哪个函数属于哪个用户?就像给一个函数一个键或什么东西一样,您可以将任意数量的参数传递给
pairMatch
函数。。。例如,您可以传递一个附加键作为第一个参数。。。所以:
var pairMatch=function(key,userA,userB){
var fun1=wrapFun(pairMatch,this,['keyA',user1,user2]);
..(funQ.shift())();有没有办法从包装函数中获取返回值?但在这种情况下,如果数组中没有函数,则while循环将结束。对吗?正确。您应该将while循环集成到应用程序的逻辑中…代码不实现整个应用程序,而只是解释如何使用上下文和参数对函数进行排队,以及以后在squence中执行它们…有没有办法知道哪个函数属于哪个用户?比如给函数一个键或什么你可以向
pairMatch
函数传递任意数量的参数…例如,你可以传递一个额外的键作为第一个参数…所以:
var pairMatch=function(key,userA,userB){
var fun1=wrapFun(pairMatch,this,['keyA',user1,user2]);
…(f