2016-03-03 5 views
0

Я пытаюсь передать аргументы в функцию в асинхронной очереди NodeJS с обратным вызовом. Я могу правильно передать один аргумент, но он не подходит для двух.NodeJS: async module: передающие аргументы

Extract (а инициируются запросом 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 правильно.

ответ

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

Отлично. Это сработало. Благодарю. – user3320795

Смежные вопросы