【问题标题】:NodeJS: async module: passing argumentsNodeJS:异步模块:传递参数
【发布时间】:2016-03-03 20:42:11
【问题描述】:

我正在尝试通过回调将参数传递给 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 定义中删除响应(或请求)参数,那么我可以使它工作。使用两个参数 + 回调,它会抛出任何错误,说明第二个参数必须是回调函数。

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

【问题讨论】:

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


    【解决方案1】:

    如果我从 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(); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2021-10-12
      相关资源
      最近更新 更多