NodeJS:异步模块:传递参数

时间:2016-03-03 20:42:12

标签: javascript node.js callback asynccallback node-async

我正在尝试使用回调将参数传递给NodeJS异步队列中的函数。我可以正确传递一个参数,但它失败了两个。

Extract(abc由HTTP POST请求触发):

var queue = async.queue(doStuff, 5); 

var abc = function(request, response)
{
    queue.push(request, response, callback); 
}

var doStuff = function(request, response, callback)
{
    promiseChain...
    then(function(result) {
        //get stuff with result
        callback(response, stuff);
    }).close(); 
}

var callback = function(response, data)
{ response.writeHead(200, {'Content-Type':'text/plain'}); response.end(data); }

如果我从doStuff定义中删除了响应(或请求)参数,那么我可以使它工作。使用两个参数+回调,它会抛出任何错误,说第二个参数必须是回调函数。

doStuff函数需要request变量。回调函数需要响应变量。任何想法如何实现?我尝试将请求和响应放入对象数组中,但数组没有正确传递到doStuff

1 个答案:

答案 0 :(得分:2)

  

如果我从doStuff定义中删除了响应(或请求)参数,那么我可以使它工作。使用两个参数+回调,它会抛出任何错误,说第二个参数必须是回调函数。

async.queue().push()只需要2个参数push(task, [callback])。这就是为什么你只得到第一个传递给你的工人的参数。将参数传递给queue.push()时,不要将参数展平,而是将它们作为对象传递

queue.push({ req: request, res: response}, callback);

然后在doStuff

var doStuff = function(params, callback) {
    // Get our params from the object passed through
    var request = params.req;
    var response = params.res;

    promiseChain...
    then(function(result) {
        //get stuff with result
        callback(response, stuff);
    }).close(); 
}