2016-06-01 75 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