代码之家  ›  专栏  ›  技术社区  ›  user3320795

NodeJS:async模块:传递参数

  •  0
  • user3320795  · 技术社区  · 8 年前

    我试图通过回调将参数传递到NodeJS异步队列中的函数中。我可以正确地通过一个论点,但它失败了两个。

    提取(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定义中删除了response(或request)参数,那么我可以让它工作。对于两个参数+回调,它抛出任何错误,表明第二个参数必须是回调函数。

    doStuff函数需要请求变量。回调函数需要响应变量。知道如何实施吗?我尝试将请求和响应放入一个对象数组,但该数组没有传递到 doStuff 正确地

    1 回复  |  直到 8 年前
        1
  •  2
  •   peteb    8 年前

    如果我从doStuff定义中删除了response(或request)参数,那么我可以让它工作。对于两个参数+回调,它抛出任何错误,表明第二个参数必须是回调函数。

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