我在函数中有“for”循环,我想创建1个对象而不是多个来保存绘制调用。 有什么办法可以做到这一点吗?在我的测试中,我发现我无法在connection.query之外创建包含来自哪个查询的数据的var。所以我什至无法使用该查询中包含的全局变量。我对此很陌生,所以任何帮助都会很棒。
app.js 中包含的外部文件
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);
});
最佳答案
如果我正确理解您的问题,这是否可以解决您的问题:
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();
});
}
我想我在某个地方丢失了一个括号,但我希望你能明白!
关于javascript - 如何使用node-mysql在for循环中创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37560873/