2016-06-01 78 views
0

我有「for」循環在一個函數中,我想使1對象而不是許多保存繪製調用。 有什麼辦法可以做到嗎?在我的測試中,我發現我無法在connection.query之外創建var,它將包含來自哪個查詢的數據。所以我甚至不能使用該查詢中包含的全局變量。我對此很感興趣,所以任何幫助都會很棒。包含在app.js如何使用node-mysql在for循環中創建對象?

load_sent_mail: function(person_id, callback, socket) { 
    pool.getConnection(function(err, connection) { 
     connection.query('SELECT * FROM `mail` WHERE mail_sender = ' + person_id + '', function(err, mail_data) { 
      if (!err) { 
       for (var key in mail_data) { 
        var items_to_get_info = []; 
        if (mail_data[key].mail_spot_1 != 0) items_to_get_info.push(mail_data[key].mail_spot_1); 
        if (mail_data[key].mail_spot_2 != 0) items_to_get_info.push(mail_data[key].mail_spot_2); 
        if (mail_data[key].mail_spot_3 != 0) items_to_get_info.push(mail_data[key].mail_spot_3); 
        if (mail_data[key].mail_spot_4 != 0) items_to_get_info.push(mail_data[key].mail_spot_4); 
        if (items_to_get_info.length) { 
         connection.query('SELECT `person_items`.`id`, `items`.`item_image`, `items`.`item_place` FROM `person_items` INNER JOIN `items` ON `person_items`.`item_id` = `items`.`item_id` WHERE `person_items`.`id`IN (' + items_to_get_info.join(",") + ')', function(err, items_in_mail) { 
          if (!err) { 
           callback(null, items_in_mail); 
          } else { 
           console.log(err) 
          } 
         }); 
        } { 
         //0 items 
        } 
       } 
      } 
     }) 
     connection.release(); 
    }); 
} 

外部文件app.js

mail.load_sent_mail(person_id,function(err,items_in_mail){ 
    socket.emit('incoming_mail', items_in_mail); 
}); 

回答

0

如果我正確理解你的問題,這並不解決您的問題:

load_sent_mail: function(person_id, callback, socket) { 
    pool.getConnection(function(err, connection) { 
     connection.query('SELECT * FROM `mail` WHERE mail_sender = ' + person_id + '', function(err, mail_data) { 
      if (!err) { 
       // Move this line before the loop 
       var items_to_get_info = []; 
       for (var key in mail_data) { 
        if (mail_data[key].mail_spot_1 != 0) items_to_get_info.push(mail_data[key].mail_spot_1); 
        if (mail_data[key].mail_spot_2 != 0) items_to_get_info.push(mail_data[key].mail_spot_2); 
        if (mail_data[key].mail_spot_3 != 0) items_to_get_info.push(mail_data[key].mail_spot_3); 
        if (mail_data[key].mail_spot_4 != 0) items_to_get_info.push(mail_data[key].mail_spot_4); 
       } 
       // Move this line after the loop 
       if (items_to_get_info.length) { 
        connection.query('SELECT `person_items`.`id`, `items`.`item_image`, `items`.`item_place` FROM `person_items` INNER JOIN `items` ON `person_items`.`item_id` = `items`.`item_id` WHERE `person_items`.`id`IN (' + items_to_get_info.join(",") + ')', function(err, items_in_mail) { 
         if (!err) { 
          callback(null, items_in_mail); 
         } else { 
          console.log(err) 
         } 
        }); 
       } 
      } 
     }) 
     connection.release(); 
    }); 
} 

I我想我在某個地方丟掉了一個支架,但我希望你明白了!

+0

for循環內的這個查詢是必需的。第一個查詢獲取有關郵件mail_spot_1,mail_spot_2中的什麼類型的項目的信息...然後,for循環會通過所有郵件以及從第一個查詢中獲取的信息並放置在第二個中。在你的情況下,它只會從最後一個郵件的人拿到物品:) – Deividas