我有一个配对算法,我将一个函数调用添加到充当队列的数组中,并逐个执行以避免匹配时发生冲突。我想要一些东西留在队列上,并在将函数添加到队列时执行。像例程一样检查数组是否有任何元素?我可以使用类似resque
的库吗?
编辑:让我明确我的问题。我有一个使用socket.io
的游戏,其中我将2个用户匹配在一起并与他们共享一些数据。用户单击配对按钮,将调用配对功能。但是问题在于,在高峰时间,用户A与B匹配,而B与C匹配。这不应该发生。因此,我使用and数组将配对函数调用排队。我希望该数组一个接一个地执行每个函数调用。有时阵列长时间排空。
答案 0 :(得分:0)
希望这个简单的代码可以使函数带有参数和上下文,然后在以后执行它们可以解决您的问题...
/**
* Wrapping function code
*
* fn - reference to function
* context - "this" context
* params - array of parameters to pass to the function
*/
var wrapFun = function(fn, context, params) {
return function() {
fn.apply(context, params);
};
}
// the function to be wrapped
var pairMatch = function(userA, userB) {
// your matching code here...
console.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' };
// wrap the function (the parameters must be in an array)
var fun1 = wrapFun(pairMatch, this, [user1, user2]);
var fun2 = wrapFun(pairMatch, this, [user3, userN]);
// create an array and append your wrapped functions to it
var funQ = [];
funQ.push(fun1);
funQ.push(fun2);
// shift all items (functions) in the array, and execute one by one...
while (funQ.length) {
(funQ.shift())();
}