2016-03-03 70 views
0

我試圖通過回調將參數傳遞到NodeJS異步隊列中的函數。我可以正確傳遞一個參數,但是它失敗了。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

回答

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