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

时间:2019-02-07 13:10:32

标签: javascript node.js

我有一个配对算法,我将一个函数调用添加到充当队列的数组中,并逐个执行以避免匹配时发生冲突。我想要一些东西留在队列上,并在将函数添加到队列时执行。像例程一样检查数组是否有任何元素?我可以使用类似resque的库吗?

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

1 个答案:

答案 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())();   
}