2015-12-02 38 views
0

我們可以從這個connection.query函數中訪問result_cont。我想從這個函數中訪問這個結果數組。如何在節點js中獲取數組功能?

var results = []; 
     for (var i = 0; i < result.length; i++) { 


      connection.query("select c.`uid`, u_p.`first_name`, u_p.`last_name` from `contents` as c inner join `user_profiles` as u_p on u_p.`user_id` = c.`user_id` where place_id ='"+result[i].id+"' ", handleResults) 

      function handleResults(err_cont, result_cont) { 

       results.push(result_cont); 
      } 
     }; 

     res.send(results); // returning empty array [] 

編輯對不起,我忘了在我的代碼添加一個循環。現在這是實際的代碼。

回答

0

使用async queue

var async = require("async"); 

var q = async.queue(function (result, callback) { 
    connection.query("select c.`uid`, u_p.`first_name`, u_p.`last_name` from `contents` as c inner join `user_profiles` as u_p on u_p.`user_id` = c.`user_id` where place_id ='"+result.id+"' ", callback); 
}, 2 /* here you can choose concurrency of the queries */); 

var results = []; 
q.drain = function() { 
    console.log("All queries executed %d", results.length); 

    // Handle all your results with a simple loop 
    for (var i = 0; i < results.length; i++) { 
     // results[i] 
    } 
} 

// Push all your results to the queue 
for (var i = 0; i < result.length; i++) { 

    q.push(result[i], function (err_cont, result_cont) { 

     /// Handle each result at the time 
     console.log(result_cont); 
     results.push(result_cont); 
    }) 
}; 
+0

對不起,我忘了在我的代碼中添加一個循環。我有更新我的問題。現在你能幫忙嗎? – iam

+0

是的,我編輯了答案 – Ido

+0

沒有幫助我。 如何把握這個需求? var results = []; (var i = 0; i iam

0

,以獲得異步返回值,您需要鏈這個回調到另一個功能,無論是使用承諾或控制流動圖書館像async.js到鏈上的一系列共同運作。如果你只是想打印值,把console.log放在函數體內。